Advertisement

Android中Handler的post()与Thread的start()执行Thread的run()区别分析

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
本文深入探讨了在Android开发中,Handler的post()方法和Thread的start()方法在执行任务时的区别,帮助开发者理解如何更有效地使用多线程。 package com.example.study_5_handlerthread; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 创建一个Handler对象,使用Handler对象h把Runnable的对象r压入队列 // 此时只会执行run()方法,但是不会开启新的线程 /* 以下为注释部分 */ Handler h = new Handler(); // h.post(r); /* 在Java中真正开启线程的方法是这样的。 */ Thread t = new Thread(r); t.start(); setContentView(R.layout.activity_main); System.out.println(Activity--> + Thread.currentThread().getId()); System.out.println(Activity--> + Thread.currentThread().getName()); } Runnable r = new Runnable() { @Override public void run() { try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Handler--> + Thread.currentThread().getId()); System.out.println(Handler--> + Thread.currentThread().getName()); } }; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }

全部评论 (0)

还没有任何评论哟~
客服
客服
  • AndroidHandlerpost()Threadstart()Threadrun()
    优质
    本文深入探讨了在Android开发中,Handler的post()方法和Thread的start()方法在执行任务时的区别,帮助开发者理解如何更有效地使用多线程。 package com.example.study_5_handlerthread; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 创建一个Handler对象,使用Handler对象h把Runnable的对象r压入队列 // 此时只会执行run()方法,但是不会开启新的线程 /* 以下为注释部分 */ Handler h = new Handler(); // h.post(r); /* 在Java中真正开启线程的方法是这样的。 */ Thread t = new Thread(r); t.start(); setContentView(R.layout.activity_main); System.out.println(Activity--> + Thread.currentThread().getId()); System.out.println(Activity--> + Thread.currentThread().getName()); } Runnable r = new Runnable() { @Override public void run() { try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Handler--> + Thread.currentThread().getId()); System.out.println(Handler--> + Thread.currentThread().getName()); } }; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }
  • HandlerThread
    优质
    简介:本文探讨了Android开发中的Handler和Thread机制,阐述了如何利用它们实现异步消息处理和线程间通信。 这个演示程序很简单,它从网络获取图片并显示出来。
  • Java线程startrun方法详解
    优质
    本文详细解析了在Java编程语言中,线程启动时使用start()和直接调用run()方法之间的区别。通过对比分析,帮助开发者理解为何推荐使用start()来创建并运行新线程。 本段落详细介绍了Java线程中start方法与run方法的区别,并通过示例代码进行了讲解,对学习或工作中遇到的相关问题具有参考价值。需要了解的朋友可以参考此内容。
  • Pythonrun()start()函数和对比介绍
    优质
    本篇文章深入探讨了Python多线程编程中的两个重要方法——`run()`和`start()`之间的区别及其应用场景。通过详细的解释帮助读者理解何时以及如何使用这两个函数,以实现更高效的程序设计。 `run()` 方法并不启动一个新线程,在主线程中调用的是普通函数。而 `start()` 方法用于创建和运行一个新的子线程,并且这个子线程的名字就是你在定义的时候指定的name值。因此,如果你想实现多线程的功能,必须使用 `start()` 方法。 例如:如果在代码里使用`run()`方法来启动一个新线程的话,打印出来的线程名会是MainThread(即主线程)。下面是具体的例子: ```python import threading, time def worker(): count = 1 while True: if count >= 4: break time.sleep(1) count += 1 print(thread name =, threading.current_thread().name) # 使用run()方法启动线程,打印出的线程名是MainThread。 t = threading.Thread(target=worker, name=MyThread) t.run() ```
  • Qt线程start()run()方法
    优质
    本篇文章深入探讨了在使用Qt框架开发时,关于QThread类中的start()和run()两个关键方法的应用技巧及注意事项。帮助开发者更好地理解多线程编程。 线程之间可以共享数据但各自独立执行。QT中的QThread是平台无关的。通常从main函数开始运行主线程,并在其中创建其他线程,这些线程都是由QThread派生出来的。
  • gdbstub4rtt:RT-ThreadGDB调试代理(已在RT-Thread master
    优质
    gdbstub4rtt是一款专为RT-Thread操作系统设计的GDB调试代理插件。它实现了通过J-Link RTT通道进行远程调试的功能,并已集成到RT-Thread最新master版本中,极大提升了开发者的调试效率和便利性。 GDB Stub 是在 GDB 进行远程调试时,在目标机上运行的一套代码。简单来说,本项目旨在 RT-Thread 中实现类似 KGDB 的功能,以便在没有仿真器(如 JTAG)的情况下调试 RT-Thread 内核和应用程序。 RT-Thread 是一款来自中国的开源实时操作系统,适用于嵌入式设备。它是一个可扩展的实时操作系统:对于 ARM Cortex-M0 和 Cortex-M3/4 等处理器提供精简内核;在 ARM Cortex-A8 或其他高级架构上则可以构建功能更全面的操作系统。
  • Java启动线程startrun两种方式
    优质
    本文探讨了在Java编程语言中启动线程的两种方法——使用start()和直接调用run()方法之间的区别及其应用场景。 在Java编程语言中启动线程主要有两种方法:一种是继承Thread类;另一种则是实现Runnable接口来创建线程对象。由于Java不支持多重继承,因此推荐使用后者。 通过start()与run()这两种方式可以初始化或开始执行一个新线程: - `start()` 方法用于开启一个新的独立运行的线程,并将该方法中的代码放入新的进程中去执行,这意味着当调用`start()`时,系统会创建一个全新的线程准备就绪等待CPU分配时间片来启动并进入run()方法中定义的任务。 - 相比之下,直接使用 `run()` 方法则更像是普通的方法调用。它不会生成额外的线程;相反,在当前执行流上下文中运行给定的代码块。这通常不是我们想要的效果,因为多线程编程的核心目标是并发地执行任务。 来看一个简单的例子来加深理解: ```java public class Test { public static void main(String[] args) { Thread t = new Thread(){ public void run() { pong(); } }; // 假设这里使用的是run() t.run(); System.out.println(ping); } static void pong() { System.out.println(pong); } } ``` 在这个例子中,如果调用`t.run()`而不是`t.start()`的话,那么先执行完线程中的代码(即打印pong),然后才会继续在主线程上输出“ping”。 但是,如果我们使用 `start()` 替换掉上述的 `run()`, 例如: ```java public class Test { public static void main(String[] args) { Thread t = new Thread(){ public void run() { pong(); } }; // 改为调用 start() t.start(); System.out.println(ping); } static void pong() { System.out.println(pong); } } ``` 那么程序输出结果将是“ping”后紧接着是pong, 因为`start()`方法会创建一个新线程,该线程立即准备运行(但并非马上执行),而main线程则继续向下执行。 关于 `start()` 和 `run()`, 它们在源码层面的区别在于:`start()` 方法被声明为同步的(synchronized),这意味着每次只能有一个线程调用它。这正是为什么它可以创建一个新的线程,而直接调用`run()`方法只是简单地执行代码块,并不会产生新的线程。 因此,在实际编程中选择使用哪种方式启动新线程应根据具体需求来决定。
  • RT-Thread 3.1.3 (RT-Thread Nano).rar
    优质
    本资源为嵌入式操作系统RT-Thread的最新版本3.1.3(含Nano内核)的压缩包,适用于各类微控制器和物联网设备开发。 RT-Thread是一款由国内开发团队打造的开源实时操作系统(RTOS),专为嵌入式系统设计。其精简版RT-Thread Nano针对资源有限的微控制器进行了高度优化,去除了不必要的组件,仅保留了核心功能,以实现更小的内存占用和更高的运行效率。 RT-Thread Nano的核心特性包括: 1. **轻量级内核**:代码体积小巧,适合资源受限的硬件平台。 2. **抢占式调度**:支持多任务,并能实现基于优先级的任务切换,确保高优先级任务及时执行。 3. **信号量与互斥锁**:提供信号量和互斥锁机制,用于进程间的同步和互斥访问资源。 4. **定时器系统**:内置定时器系统,支持周期性和一次性定时任务。 5. **内存管理**:具备基本的内存分配和释放功能,可进行堆内存管理。 6. **中断处理**:能够高效处理硬件中断,确保系统的实时响应。 RT-Thread Nano的优势在于: 1. **易于集成**:与标准RT-Thread兼容,便于移植和升级到完整的RT-Thread系统。 2. **低资源需求**:占用极小的内存空间,可以运行在只有KB级别的闪存和RAM的设备上。 3. **高性能**:尽管体积小巧,但依然保持良好的实时性能。 4. **社区支持**:拥有活跃的开发者社区,提供丰富的驱动程序和应用示例,便于开发和调试。 RT-Thread Nano适用于智能家居、物联网设备、工业控制、消费电子等嵌入式领域。对于这些应用场景,系统资源通常是关键考虑因素,而RT-Thread Nano的设计正好满足了这一需求。 在压缩包中(如rt-thread-3.1.3版本的RT-Thread Nano),可能包含了以下内容: 1. **源代码**:C语言编写的核心内核和库文件。 2. **文档**:包括用户手册、API参考以及开发指南等,帮助开发者理解和使用系统。 3. **构建工具**:如Makefile或CMakeLists.txt,用于编译和构建项目。 4. **示例项目**:提供多个示例应用程序以展示如何在实际场景中运用RT-Thread Nano。 5. **驱动程序**:包含通用硬件驱动代码,例如串口、GPIO等。 通过学习与使用RT-Thread Nano,开发者不仅可以提升嵌入式系统的开发效率,并且能充分利用有限的资源来实现稳定可靠的实时应用。同时,由于其开源特性,还能从社区获取持续的技术支持和更新以保持项目长期竞争力。
  • RT-ThreadKconfig修改.doc
    优质
    本文档详细介绍了在嵌入式操作系统RT-Thread中如何对配置工具Kconfig进行定制和优化,以满足不同项目需求。适合开发者参考学习。 主要是对Kconfig文件进行修改,在使用ENV工具时针对rt-thread的源码进行了删减并调整了路径处理,使其继续适应ENV工具。