android点滴(26)之让线程拥有自己的消息循环


我们都知道android中更新界面的时候要在主线程中跟新,所以我们通常在线程中更新或者获取数据,但是使用Handler 来更新数据。

 这里使用的就是android的消息机制。相关的类有Looper,Message,MessageQueue,Handler。Looper是一个消息循环。UI线程默认

情况下就有一个消息循环,但是我们自己的线程没有,我们的线程默认的是使用UI线程的Looper。

我们的线程会有多种用途,有的是要更新UI的,有的是与UI不相干的 ,与UI相关的可以理所当然的使用UI线程的Looper,但是如果与

UI线程不相干呢?你也用?好意思吗?这时候我们可以为自己的线程添加Looper。

为自己的线程添加线程有两种方法,其实这两种方法本质上是没有区别的。1.在自己的线程中使用Looper.prepare()以及Looper.loop()。

2.使用sdk中的HandlerThread类,只要实例化HandlerThread对象,并且设置一个Handler就好了。 

 

第一种方法--自己动手的示例如下

 1 private class MyThread extends Thread{ 

 2         
 3         public Handler mHandler = null;
 4         
 5         @Override
 6         public void run() {
 7             Looper.prepare();
 8             
 9             System.out.println("Thread 中 name = " + Thread.currentThread().getName());
10             
11             mHandler = new Handler(){
12 
13                 @Override
14                 public void handleMessage(Message msg) {
15                     System.out.println("handler 中 name = " + Thread.currentThread().getName());
16                     
17                     super.handleMessage(msg);
18                 }
19             };
20             
21             Looper.loop();
22             
23         }
24         

25     }  


  第二种方法--使用HandlerThread的方法如下

定义一个HandlerThread对象 ,并且设置Handler

1  mThread.start(); 

2  mHandlerThread.start();
3  mHandler = new MyHandler(mHandlerThread.getLooper());

   

 1  

 2privateclass MyHandler extends Handler{
 3         
 4         public MyHandler(Looper looper) {
 5             super(looper);
 6         }
 7         
 8         @Override
 9         public void handleMessage(Message msg) {
10             
11             System.out.println(Thread.currentThread().getName());
12             
13             super.handleMessage(msg);
14         }
15     }

 详细的示例见附件

 android线程Looper

原文地址:https://www.cnblogs.com/cody1988/p/2556495.html