1.概述
Handler允许你发送和处理Message,以及和线程相关联的Runnable对象。每一个Handler实例都与一个线程及该线程的MessageQueue相关联。既当你创建一个Handler时,该Handler必须绑定一个线程以及该线程的消息队列,一旦它被创建,它能把messages和runnables传送到message queue,并在它们从message queue中出来的时候执行它们。
Handler主要有两个主要用途:
- 在未来的某个时间点调度messages和runnables的执行
- 将要在不同线程上执行的操作加入队列
当你的应用程序被创建出来的时候,主线程会专门运行一个message queue来管理最顶级的应用对象(如activities, broadcast receivers,等等)以及它们创建的任何其它窗口。你可以创建你自己的线程,通过Handler来与主线程建立联系
2.源码分析
2.1 MessageQueue-消息队列
MessageQueue是一个通过Looper分发它持有的消息列表的低层级类。Messages没有直接添加到MessageQueue中,而是通过与Looper相关联的Handler对象。
- Message-消息
该类实现了Parcelable接口,你可以把它看作一个数据类
1 | ** |
2.2 Looper-消息轮询器
Looper用于为线程轮询messages。线程默认是没有与之相关联的Lopper,我们必须通过Looper.prepare()方法去创建它。示例:
1 | class LooperThread extends Thread { |
- ThreadLocal提供线程的局部变量,通过它访问线程独立初始化变量的副本。即Looper通过ThreadLocal类来与当前线程进行交互
1 | //私用构造方法 |
2.3 Handler
2.3.1 创建Handler对象
1 | /** |
2.3.2 创建Message对象
1 | public final Message obtainMessage() |
2.3.3 发送Message
1 | /** |
###