主要有四大类Message, Looper, MessageQueue, Handler
1.
一个线程有一个Looper,每个Looper都有一个MessageQueue.
2.
MessageQueue是Message的一个容器,是个链表
3.
Message的结构有几个比较有意思的变量
Runnable callback;
Handler target;
4.
Looper的关键函数就是一个循环,不停去获取MessageQueue中的Message,执行msg.target.dispatchMessage
/**
* Run the message queue in this thread. Be sure to call
* {@link #quit()} to end the loop.
*/
public static void loop() {
...
for (;;) {
Message msg = queue.next(); // might block
if (msg == null) {
// No message indicates that the message queue is quitting.
return;
}
...
msg.target.dispatchMessage(msg);
...
msg.recycle();
}
}
/**
* Handle system messages here.
*/
public void dispatchMessage(Message msg) {
if (msg.callback != null) {
handleCallback(msg);
} else {
if (mCallback != null) {
if (mCallback.handleMessage(msg)) {
return;
}
}
handleMessage(msg);
}
}