主要有四大類Message, Looper, MessageQueue, Handlerweb
1. 函數
一個線程有一個Looper,每一個Looper都有一個MessageQueue.oop
2.ui
MessageQueue是Message的一個容器,是個鏈表this
3. spa
Message的結構有幾個比較有意思的變量.net
Runnable callback; 線程
Handler target;get
4.it
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); } }