Android之訊息處理機制(二)Handler的本質-Message和Looper到底是什麼?
阿新 • • 發佈:2018-12-15
目錄
Android之訊息處理機制(二)
以下皆為乾貨,比較幹,需要讀者細細理解。
前面(一)已經解釋了Handler的基本機制了,下面來概括一下本質。
一、MessageQueue
MessageQueue其實就是一個when來排序的一個優先順序佇列。(是一個連結串列結構)
二、Looper
2.1 訊息池
Looper迴圈從訊息佇列中取需要處理的message,並交給Handler處理,處理完後清理並快取到訊息池中(下次通過Message.obtain()可以獲取訊息池中的Message,如果你重新new Message()是不是浪費了一點記憶體了,需要重新要求系統去分配記憶體,然後不用了需要釋放記憶體,而訊息池的思想類似於快取,用完後快取一些Message,等到需要用的時候直接去取快取的Message就可以了,節省了記憶體分配釋放等的時間和損耗)。
2.2 自醒機制
自醒機制的要點:1)如果Looper取不到訊息,就會進入等待狀態(不是多執行緒中的wait,而是通過底層編碼的方式去實現等待的效果,但不阻塞主執行緒。),不過具體的底層機制及實現細節我也不太清除,還需要讀者自行去翻閱相關書籍去檢視。
2)一旦Handler向訊息佇列中傳送訊息,就喚醒處於等待狀態的Looper。