Handler机制
Handler机制几乎贯穿了整个应用从启动到结束,包括Throwable抛出异常、View绘制、事件分发、Activity启动、Activity生命周期等都涉及到Handler机制。
我们知道,主线程中不建议耗时操作,子线程中不允许更新UI,会可能导致ANR。所以,我们需要,能在子线程中做完耗时操作,然后去到主线程更新UI的办法。消息机制,即消息的发送、入队、出队、分发过程。
Android 消息机制涉及了四个部分:
- Handler: 消息的发送者和处理着
- Message: 消息的载体
- MessageQueue: 消息队列
- Looper: 消息循环体
消息机制流程如下:
- 主线程通过prepare创建一个Looper对象,且规定只允许关联一个Looper。
- MessageQueue是依赖Looper一起创建的。Thread = Looper = MessageQueue。
- 调用Looper.loop()方法,进行消息循环获取
MessageQueue
中的Message对象
,如果消息为空就会进行线程阻塞。 - 创建Handler对象后,自动绑定Looper对象和MessageQueue队列。
- 然后调用与
Message
绑定的Handler
对象的dispatchMessage
方法实现接口回调,从而更新handle所在的主线程的UI。
Looper轮询器
public static final void main(String[] args) {
//1、调用prepare()方法创建Looper对象并把该对象setMainLooper()绑定到当前线程中
Looper.prepareMainLooper();
...
//2、主线程中调用Looper.loop(),开始轮询,取消息
Looper.loop