Activity
在UI線程中初始化ActivityThread
ActivityThread
在main函數(shù)中噪径,調(diào)用了Looper.prepareMainLooper()
;prepareMainLooper
方法調(diào)用了prepare()
,prepare
方法首先會調(diào)用ThreadLocal.get()
方法,如果ThreadLocal
為空数初,則拋出異常找爱,調(diào)用set()
方法ThreadLocal.set()
的Looper
初始化了一個MessageQueue
Handler.sendEmptyMessage();
發(fā)送消息Looper.loop()
獲取MessageQueue
,循環(huán)獲取MessageQueue
中的消息泡孩,如果消息是空的就結(jié)束车摄,否則handler.dispatchMessage()
dispatchMessage
中先callback
如果為空,根據(jù)boolean handleMessage(Message msg)
的返回值,如果為true吮播,說明已經(jīng)處理变屁,后面的不會再執(zhí)行;如果為false
意狠,會調(diào)用handler
自己的方法void handleMessage(msg) handler
即可收到消息內(nèi)容
總結(jié):handler
負責message
的發(fā)送粟关,并把message
放在MessageQueue
隊列中,Looper
負責接受message
并把處理好的message
回傳給handler
自己