android的消息機(jī)制主要指的是handler的運(yùn)行機(jī)制低斋,handler的主要作用是將一個(gè)任務(wù)切換到某個(gè)指定的線程中去執(zhí)行蜂厅,handler的運(yùn)行需要底層的MessageQueue和Looper的支撐。
MessageQueue負(fù)責(zé)存儲(chǔ)消息列表膊畴,不處理消息掘猿,消息的處理由Looper負(fù)責(zé)。Looper會(huì)無限循環(huán)的從MessageQueue中查看是否有新消息唇跨,如果有就立即處理术奖,否則就會(huì)阻塞在那里。
在創(chuàng)建handler的時(shí)候必須要綁定一個(gè)Looper轻绞,沒有Looper的話就會(huì)報(bào)錯(cuò)采记。可以調(diào)用Looper.prepare()(創(chuàng)建當(dāng)前線程的Looper)或者Looper.getMainLooper()(主線程的Looper)方法創(chuàng)建Looper政勃。
所以不管handler在哪發(fā)送消息唧龄,Looper處理消息時(shí)都是在Looper自己所在的線程,這樣就實(shí)現(xiàn)了線程間通信奸远。
Looper是通過ThreadLocal實(shí)現(xiàn)的既棺。