Android中,Handler的工作主要包含消息的發送和接收。Handler 作為日常開發的必備,不可避免就要涉及這方面的知識。從開發者角度來説,Handler 是 Android 消息機制的上層接口,使得開發的時只需與 Handler 交互即可。Handler 使用也很簡單,能夠輕鬆將一個任務切換到 Handler 所在的線程中執行。
發送消息主要通過post和send的一系列方法實現,發送消息的過程只是向MessageQueue中插入一條消息,它的next方法就會把這條消息返回給Looper,Looper收到消息後就開始處理了。最終消息由Looper交由Handler處理。由於Looper裏面使用了ThreadLocal,所以它就能夠將消息切換到指定的線程中執行。
Looper將消息交由Handler處理,就會調用Handler的disaptchMessage方法。這時候就進入了處理消息的階段。
public void dispatchMessage(Message msg) {
if (msg.callback != null) {
handleCallback(msg);
} else {
if (mCallback != null) {
if (mCallback.handleMessage(msg)) {
return;
}
}
handleMessage(msg);
}
}
首先,檢查Message的callback是否為null,不為null就通過handleCallback處理消息。這個callback是一個Runnable對象,也就是我們在post方法裏傳遞的Runnable參數。
其次檢查mCallBack是否為null,不為空就調用handleMessage方法。CallBack是一種當我們不想通過派生子類創建Handler的另外一種實現方式。
最後調用Handler的handlerMessage來處理消息
相關類
- Message:消息,其中包含了消息ID,處理對象和處理數據,由MessageQueue統一隊列管理,最終由Handler處理。
- Handler:負責Message發送和處理。
- MessageQueue:消息隊列,按照FIFO原則存放消息。
- Looper:消息泵,來處理MessageQueue中的Message。
這幾個類之間的關係可總結如下: