Handler概述
Handler的作用是線程間通信,在不同線程中間傳遞消息。
消息循環(huán)主題結(jié)構(gòu)圖例分析
Paste_Image.png
從圖中可以看出,四種顏色分別代表了四個(gè)對(duì)象,并且大致描述了幾個(gè)對(duì)象之間的關(guān)系,以及消息的流轉(zhuǎn)過程,首先Handler通過sendMessage將消息投遞給MessageQueue,Looper通過消息循環(huán)(loop)不斷的從MessageQueue中取出消息,然后消息被Handler的dispatchMessage分發(fā)到handleMessage方法消費(fèi)掉。
Handler
通過Handler的sendMessage等方法來投遞消息到MessageQueue,通過handleMessage來消費(fèi)Message。Handler必須要有一個(gè)已經(jīng)prepare好的Looper對(duì)象,也就是說必須調(diào)用了prepare方法(也包括prepareMainLooper方法),究其根本是初始化一個(gè)消息隊(duì)列,這一過程將在下文中詳細(xì)分析。
Looper
Looper負(fù)責(zé)從MessageQueue中取出消息,然后通過執(zhí)行message.target.dispatchMessage()消費(fèi)掉這個(gè)消息,這里的target就是Handler。
MessageQueue
消息隊(duì)列,管理Handler投遞過來的消息。
Message
用來承載數(shù)據(jù)的消息,最終被Handler消費(fèi)掉。
UML類圖分析
Paste_Image.png