1,Handler
handler的sendMessage會調(diào)用消息隊列的enqueueMessage方法將handler本身綁定到msg消息上誓沸,然后放入消息隊列中姿锭。而消息隊列主要提供了enqueueMessage入隊和next出隊的操作塔鳍,采用的是單鏈表結(jié)構(gòu)。也就是handler在創(chuàng)建的時候就已經(jīng)和創(chuàng)建handler的線程以及線程持有的looper以及消息隊列綁定了呻此。
2轮纫,Looper
Looper持有一個靜態(tài)的final的成員變量ThreadLocal,并且在創(chuàng)建的時候會綁定一個MessageQueue焚鲜。
當Looper調(diào)用prepare的時候會得到當前線程綁定的ThradLocalMap里面的looper掌唾,如果沒有就為當前線程設(shè)置一個Looper放前。(ThradLocalMap是線程的一個成員變量,在get的時候如果為空的話就會創(chuàng)建一個并且賦值給線程)調(diào)用loop方法的時候就是循環(huán)從消息隊列取出消息進行處理糯彬。