爲了解決多個線程併發操作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。