1,android自訂訊息。
Looper,MessageQueue,Message,Handler
1, 先看下這幾個類的關係,MessageQueue是一個包含了Message的隊列。一個Looper中包含有一個MessageQueue, Message中有對Handler(訊息的處理者)的引用。
2,一個android的主線程中有且僅有一個Looper,當程式啟動時這個looper就開始不斷的從MessageQueue裡取出訊息來進行處理。應該是一個while的迴圈。
當沒有訊息時,messageQueue.next()就處於阻塞狀態,直到有新的訊息取出。
3,新開一個線程是預設是沒有Looper的。但是也可以給它加一個Looper,有了Looper這個線程就可以進行訊息處理了。
4,在同一個app中,其它線程可以取的主線程的Looper,這樣就可以實現子線程和主線程之間的通訊。
Looper.loop();方法的源碼,當執行這個時就進入了訊息迴圈。
public static final void loop() {
Looper me = myLooper();
MessageQueue queue = me.mQueue;
while (true) {
Message msg = queue.next(); // might block
//if (!me.mRun) {
// break;
//}
if (msg != null) {
if (msg.target == null) {
// No target is a magic identifier for the quit message.
return;
}
if (me.mLogging!= null) me.mLogging.println(
">>>>> Dispatching to " + msg.target + " "
+ msg.callback + ": " + msg.what
);
msg.target.dispatchMessage(msg);
if (me.mLogging!= null) me.mLogging.println(
"<<<<< Finished to " + msg.target + " "
+ msg.callback);
msg.recycle();
}
}
}