Handler消息傳遞機制

爲了解決多個線程併發操作UI組件,可能導致線程不夠安全的問題,Android只允許UI線程修改Activity裏的UI組件。

Android消息傳遞機制主要是爲了解決Android多線程問題。Android只允許UI線程修改Activity裏的UI組件,會導致新啓動的線程無法動態改變界面組件的屬性。

Handler類主要是在啓動的新線程中發送消息,在主線程中獲取、處理消息。所以要是Handler正常工作,當前線程中就必須有一個MessageQueue去保存消息。Handler先進先出原則。用Looper來管理特定線程內對象之間的消息交換。每個線程中只有一個Looper,負責管理MessageQueue,不斷從MessageQueue中取出消息,並將消息分給對應的Handler處理。

MessageQueue有Looper負責管理。它採用先進先出的方式來管理Message。

Handler能把消息發送給Looper管理的MessageQueue,並負責處理Looper分給它的消息。

Handler的消息機制中引入了消息池。Handler創建消息時,先去消息池中查看是否存在消息,如果存在,直接從消息池中獲取;如果不存在,則重新初始化一個消息實例。

使用消息池優點:當消息不被使用時,並不作爲垃圾回收,而是放入消息池,Handler下次創建消息時可以使用。這樣就提高了消息對象的複用,減少系統垃圾回收的次數。

在線程中使用Handler的步驟:

1、調用Looper的prepare()方法爲當前線程創建Looper對象,創建Looper對象時,它的構造器會創建與之配套的MessageQueue。

2、有了Looper之後,創建Hander子類的實例,重寫handleMessage()方法,該方法負責處理來自其他線程的消息。

3、調用Looper的loop()方法啓動Looper。

發佈了32 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章