1. 程式人生 > >Android之訊息處理機制(二)Handler的本質-Message和Looper到底是什麼?

Android之訊息處理機制(二)Handler的本質-Message和Looper到底是什麼?

目錄

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。