Android Handler筆記

Android Handler筆記

消息機制

Handler持有Looper和MessageQueue的引用.
Looper創建消息隊列, 在隊列中循環取消息. 持有MessageQueue和Thread的引用.
MessageQueue維持一個消息隊列, 能進行消息的入隊出隊操作.
Message持有Handler的引用target, 和Runnable的引用callback.

在Handler的post(Runnable r)方法中, 給Message的callback賦值爲r. 在enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis)中, 將msg.target賦值爲this.

在Looper的loop()方法中, 開啓死循環獲取MessageQueue中的消息, 調用msg.target.dispatchMessage(msg), 交給Handler處理.

Handler的 dispatchMessage方法:

    /**
     * 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);
        }
    }

只有Message.callback爲空時, 纔會交給Handler的handleMessage方法處理消息. 使用handle.post發送的消息callback一定不爲空, 所以使用post一定不會觸發handler的handleMessage方法.

Handler.post 和 Handler.sendMessage 本質上是一樣的, 都是調用Handler.sendMessageDelayed. 區別在於post發送的消息callback不爲空.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章