三個核心類:Looper,Handler和Message,
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=this爲handler發送的message貼上當前handler的標籤
7.開啓HandlerThread線程,執行run方法。
8.在HandlerThread類的run方法中開啓輪詢器進行輪詢:調用Looper.loop()方法進行輪詢消息隊列的消息
9.在消息隊列MessageQueue中enqueueMessage(Message msg, long when)方法裏,對消息進行入列,即依據傳入的時間進行消息入列(排隊)
10.輪詢消息:與此同時,Looper在不斷的輪詢消息隊列
11.在Looper.loop()方法中,獲取到MessageQueue對象後,從中取出消息(Message msg = queue.next()),如果沒有消息會堵塞
12.分發消息:從消息隊列中取出消息後,調用msg.target.dispatchMessage(msg);進行分發消息
13.將處理好的消息分發給指定的handler處理,即調用了handler的dispatchMessage(msg)方法進行分發消息。
14.在創建handler時,複寫的handleMessage方法中進行消息的處理
15.回收消息:在消息使用完畢後,在Looper.loop()方法中調用msg.recycle(),將消息進行回收,即將消息的所有字段恢復爲初始狀態。