1 机制
2 其他
Handler有sendMessage和post两种用法,但本质上都是Message,post是通过sendMessage实现的。
1
2
3
public final boolean post(@NonNull Runnable r) {
return sendMessageDelayed(getPostMessage(r), 0);
}
sendMessage最后都是通过enqueueMessage将Message加入Message Queue的。
Looper.loop是一个死循环,负责消息分发。
1
2
3
4
5
6
7
8
9
10
11
public static void loop() {
// ...
for (;;) {
Message msg = queue.next(); // might block
// ...
msg.target.dispatchMessage(msg);
// ...
msg.recycleUnchecked();
}
// ...
}
Handler有sendMessage和post两种用法,dispatchMessage针对两种用法分别实现。
1
2
3
4
5
6
7
8
9
10
11
12
public void dispatchMessage(@NonNull Message msg) {
if (msg.callback != null) {
handleCallback(msg);
} else {
if (mCallback != null) {
if (mCallback.handleMessage(msg)) {
return;
}
}
handleMessage(msg);
}
}
mCallback在构造Handler时传入,作用和重载handleMessage函数一样。