Handler机制
Handler机制是Android中基于消息队列的线程间通讯机制,符合事务驱动型设计,主要作用有:
- 切换代码执行线程
- 顺序处理消息,有效避免并发
- 阻塞线程,避免线程退出
- 延迟处理消息
Handler机制涉及到Handler、Looper、MessageQueue三个关键类。其中:
- Looper通过ThreadLocal实现线程单例
- MessageQueue通过next和enqueue方法(底层通过epoll)实现消息获取和线程等待,并且支持IdleHandler能力
- Handler通过post、sendMessage实现消息和Runnable的跨线程执行
public void dispatchMessage(@NonNull Message msg) {
if (msg.callback != null) {
handleCallback(msg);
} else {
if (mCallback != null) {
if (mCallback.handleMessage(msg)) {
return;
}
}
handleMessage(msg);
}
}
为了提供优先级能力,对于Msg.target == null的消息为同步屏障消息,只有异步消息能跨越同步屏障