handler消息處理機制

三個核心類LooperHandlerMessage

MessageQueue(消息隊列)在Looper內部

Looper.prepare();//將當前線程初始化爲Looper線程

Looper.loop();// 開始循環處理消息隊列


handler機制

1.在創建Activity之前,在系統啓動的時候先加載ActivityThread類,在這個類的main函數中,調用Looper.prepareMainLooper()進行初始化Looper對象。

2.創建主線程的handler對象

3.創建ActivityThread對象

4.調用Looper.loop(),不斷的進行輪詢消息隊列中的消息

5.sendMessage()將消息發送給消息隊列

6.在發送消息的時候,使用message.target=thishandler發送的message貼上當前handler的標籤

7.開啓HandlerThread線程,執行run方法。

8.HandlerThread類的run方法中開啓輪詢器進行輪詢:調用Looper.loop()方法進行輪詢消息隊列的消息

9.在消息隊列MessageQueueenqueueMessage(Message msg, long when)方法裏,對消息進行入列,即依據傳入的時間進行消息入列(排隊)

10.輪詢消息:與此同時,Looper在不斷的輪詢消息隊列

11.Looper.loop()方法中,獲取到MessageQueue對象後,從中取出消息(Message msg = queue.next()),如果沒有消息會堵塞

12.分發消息:從消息隊列中取出消息後,調用msg.target.dispatchMessage(msg);進行分發消息

13.將處理好的消息分發給指定的handler處理,即調用了handlerdispatchMessage(msg)方法進行分發消息。

14.在創建handler時,複寫的handleMessage方法中進行消息的處理

15.回收消息:在消息使用完畢後,在Looper.loop()方法中調用msg.recycle(),將消息進行回收,即將消息的所有字段恢復爲初始狀態。




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