大家都知道,在PC上的应用程序当需要进行一些复杂的数据操作,但不需要界面UI的时候 ,我们会为应用程序专门写一个线程去执行这些复杂的数据操作。通过线程,可以执行例如 :数据处理、数据下载等比较耗时的操作,同时对用户的界面不会产生影响。在Android应用 程序开发中,同样会遇到这样的问题。当我们需要访问网络,从网上下载数据并显示在我们 的UI上时,就会启动后台线程去下载数据,下载线程执行完成后将结果返回给主用户界面线 程。
对于线程的控制,我们将介绍一个Handler类,使用该类可以对运行在不同线程中的多个 任务进行排队,并使用Message和Runnable对象安排这些任务。在javadoc中,对Handler是这 样解释的:Handler可以发送和处理消息对象或Runnable对象,这些消息对象和Runnable对象 与一个线程相关联。每个Handler的实例都关联了一个线程和线程的消息队列。当创建了一个 Handler对象时,一个线程或消息队列同时也被创建,该Handler对象将发送和处理这些消息 或Runnable对象。
下面有几种对Handler对象的构造方法需要了解一下:
a、如果new一个无参构造函数的Handler对象,那么这个Handler将自动与当前运行线程相 关联,也就是说这个Handler将与当前运行的线程使用同一个消息队列,并且可以处理该队列 中的消息。
private Handler handler = new Handler();
我们做这样一个实验,在主用户界面中创建一个带有无参构造函数的Handler对象,该 Handler对象向消息队列推送一个Runnable对象,在Runnable对象的run函数中打印当前线程 Id,我们比较主用户界面线程ID和Runnable线程ID是否相同。具体代码如下:
HandlerTest01
public class HandlerTest01 extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView(R.layout.main); System.out.println("Activity ---> " + Thread.currentThread().getId()); handler.post(r); } private Handler handler = new Handler(); private Runnable r = new Runnable() { @Override public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println ("Runnalbe ---> " + Thread.currentThread().getId()); } };}
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索对象
, 线程
, handler
, android 后台服务
, 消息队列
, runnable
, android handler
, android 后台运行
, c++ 线程 后台 界面
, 一个
, android的handler
, android多线程下载
Handler+线程
android handler 线程、android子线程handler、android线程的handler、android 线程延迟执行、android 线程顺序执行,以便于您获取更多的相关知识。