2016-01-21 94 views
1

當我們在主UI線程中實例化一個Handler對象(對於此示例,可以說我正在使用匿名內部類)。Android處理程序handleMessage()方法調用

Handler h = new Handler() { 
    @override 
    public void handleMessage (Message msg) { 
     /* Code to handle the message */ 
    } 
}; 

我們可以只通過這Handler對象引用到其他線程誰可以發佈狀態更新來使用這個參考(h.sendMessage())UI線程。

懷疑:我們沒有提供我們的定製匿名類參考hHandler任何地方的Activity類或UI線程。爲了調用重寫的方法,UI線程必須具有對我們類的對象引用。那麼如何調用被覆蓋的handleMessage()而不是默認的?

+1

我不最後一段理解。你能用不同的方式描述它嗎? –

+0

我相信這兩個工作主線程,並可以訪問方法和變量。 – Rohit5k2

+0

@DominikSuszczewicz修改了一些陳述。請現在試試 –

回答

4

您的handleMessage()正在由Looper調用。你可以看到here這個looper在消息目標上調用dispatchMessage,它是一個Handler。當您的post a message內部處理程序正在分配目標this。因此,流程如下:

  1. 您發佈一條消息在您的處理程序,在內部它會創建一個Message對象有其處理程序的引用。

  2. 該消息放置到被主界面管理的消息隊列thred(在這種特殊情況下)

  3. 當時間到來的時候,Android是從隊列中移除你的消息,並使用其目標字段 - 電話handleMesage在上面。

此外 - 什麼重要的是,如果你不指定特定的Looper創建處理程序時,則默認活套用於它被實例化的線程。在你的情況下,它的主要UI Looper。

0

您只需調用h.sendEmptyMessage()

相關問題