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。

這幾個類之間的關係可總結如下:

java項目中handler一般是什麼_Android