作者: zhangxiaowei
Handler拥有下面两个重要的特点:
1.handler可以在任意线程发送消息,这些消息会被添加到关联的消息队列上。
2.handler是在它关联的looper线程中处理消息的。
总结:
1. 一个Thread只能有一个Looper对象;
2.每一个线程里可含有一个Looper对象以及一个MessageQueue数据结构;
3.一个线程可以有多个Handler,但是只能有一个Looper;
4.主线程即UI线程是有消息循环的,子线程默认是没有消息循环的;
5.消息循环的本质是,一个线程开启循环模式持续监听并依次处理其他线程给它发的消息;
1 .Android 为什么要设计只能通过 Handler 机制更新 UI 呢?
最根本的目的就是解决多线程并发的问题,假设在一个 Activity 当中,有多个线程去更新 UI,并且对更新的 UI 的操作进行枷锁处理的话又会产生什么样的问题呢? 那就是性能下降,Handler 通过消息队列,保证了消息处理的先后有序。鉴于以上问题的考虑,Android 给我们提供了一套更新 UI 的机制,我们只要使用一套机制就好,所有的更新 UI 的操作都是在主线程中轮询处理。
2.Handler 与 Looper、MessageQueue 的关系。
handler 负责发送消息,Looper 负责接收 Handler 发送消息,并直接把消息回传给 handler 自己,MessageQueue 就是一个存储消息的容器。
3.如果想在子线程中创建一个位于主线程的Handler,该怎么做呢?
其实也很简单,在创建Handler时传入主线程的looper对象即可, Handler mHandler=new Handler( Looper.getMainLooper());
参考阅读
Android(线程一) 线程
Android(线程二) 线程池详解
Android 源码解析Handler处理机制(一)
Android 源码解析Handler处理机制(二)
Android 源码解析AsyncTask(一)
Android 源码解析AsyncTask(二)
Android 更新UI方法的深度解析