天天看點

Android菜鳥的成長筆記(12)——Handler、Loop、MessageQueue

  當一個程式第一次啟動時,Android會啟動一條主線程(Main Thread),主線程主要負責處理與UI相關的事件,如按鍵事件、觸屏事件、繪圖事件,主線程也被稱為UI線程。

UI的操作隻能是通過主線程來操作,為了解決多線程操作UI的問題,就用到了Handler類。

一、Handler類

Handler類的作用有兩個: 1、在新啟動的線程中發送消息。 2、在主線程中擷取、處理消息。 例如:

Message是Hander接收和處理的消息對象。通過向Message中添加消息,将消息放入消息隊列MessageQueue,然後通過Looper方法讀取MessageQueue。 打開Android系統源碼可以看到:

程式建立時Looper會在它的構造器中建立MessageQueue對象。 handlerMessage方法位于主線程,可以處理UI.

二、Handler、Looper、MessageQueue的工作原理

Looper:每個線程隻有一個Looper,負責管理MessageQueue,會不斷地從MessageQueue中取出消息,并将消息分給對應的Handler處理。 MessageQueue:由Looper負責管理,采用先進先出的方式管理Message(消息隊列). Handler:把消息發送給Looper管理的MessageQueue并負責處理Looper分給它的消息。 為了保證目前線程中有Looper對象,有如下兩種情況: 1、主UI線程中,系統已經初始化了一個Looper對象,是以程式直接建立Handler即可。 2、自己定義的子線程,必須先建立一個Looper對象,并啟動它。 例如:将上面的例子加以修改
Android菜鳥的成長筆記(12)——Handler、Loop、MessageQueue

繼續閱讀