1.handler消息處理器蕴侧,負(fù)責(zé)處理消息
2.Message消息灰署,包含消息id、被處理的對(duì)象
3.MessageQueue消息隊(duì)列为鳄,存放handler發(fā)送的Message
4.Looper消息泵裳仆,不間斷的從MessageQueue中抽取消息
簡(jiǎn)單比喻:Looper是水泵,Message是水孤钦,MessageQueue是水池歧斟,handler是操作的人。
Handler機(jī)制的大致流程:
1.在Looper.loop()方法運(yùn)行開始后偏形,循環(huán)的按照接收順序取出MessageQueue里面的非NULL的Message静袖。
2.一開始MessageQueue里面的Message都是NULL的,當(dāng)Handler.sendMessage(Message)到MessageQueue俊扭,該函數(shù)里面設(shè)置了那個(gè)Message對(duì)象的target屬性是當(dāng)前Handler對(duì)象队橙。隨后Looper取出了那個(gè)Message,則調(diào)用該Message的target指向的Handler的dispatchMessage函數(shù)對(duì)Message進(jìn)行處理萨惑。在dispatchMessage方法里捐康,如何處理Message則由用戶指定,三個(gè)判斷庸蔼,優(yōu)先級(jí)從高到低:
1)Message里面的Callback解总,一個(gè)實(shí)現(xiàn)了Runnable接口的對(duì)象,其中run函數(shù)做處理工作
2)Handler里面的mCallback指向的一個(gè)實(shí)現(xiàn)了Callback接口的對(duì)象姐仅,由其handleMessage進(jìn)行處理花枫。
3)處理消息Handler對(duì)象對(duì)應(yīng)的類繼承并實(shí)現(xiàn)了其中handleMessage函數(shù)刻盐,通過這個(gè)實(shí)現(xiàn)的handleMessage函數(shù)處理消息。
4)Handler處理完該Message后劳翰,Looper則設(shè)置該Message為NULL敦锌,以便回收。