####
Activity线程消息传递机制
消息循环
Looper.loop,主线程默认开启了loop,ActivityThread.main 入口开启了消息循环
nativePollOnce 阻塞在那监听是否有别的线程往当前消息队列发送消息,如果有消息或者超时会唤醒阻塞
消息发送
handle.sendMessage发送消息
消息处理
消息分发:msg.target 就是一个handle,handle.dispatchMessage,handlerMessage
如果消息没有自带callback就会判断是否有全局mCallback,最后才会调用handleMessage
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15/**
95 * Handle system messages here.
96 */
97 public void dispatchMessage(Message msg) {
98 if (msg.callback != null) {
99 handleCallback(msg);
100 } else {
101 if (mCallback != null) {
102 if (mCallback.handleMessage(msg)) {
103 return;
104 }
105 }
106 handleMessage(msg);
107 }
108 }
延时消息:消息插入会按执行时间排序(计算触发时间),postDelay就是依赖这个,当时间大于delay时间就会取出执行,延时精度不准(1,计算的触发超时时间,2.卡顿)
屏障消息,ui绘制绿色通道,收到屏障消息阻塞普通消息,执行异步消息
idlehandle 空闲消息处理