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就好了。
第一种方法--自己动手的示例如下
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
2 mHandlerThread.start();
3 mHandler = new MyHandler(mHandlerThread.getLooper());
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 }
详细的示例见附件