Activity
在UI线程中初始化ActivityThread
ActivityThread
在main函数中,调用了Looper.prepareMainLooper()
;prepareMainLooper
方法调用了prepare()
,prepare
方法首先会调用ThreadLocal.get()
方法,如果ThreadLocal
为空,则抛出异常,调用set()
方法ThreadLocal.set()
的Looper
初始化了一个MessageQueue
Handler.sendEmptyMessage();
发送消息Looper.loop()
获取MessageQueue
,循环获取MessageQueue
中的消息,如果消息是空的就结束,否则handler.dispatchMessage()
dispatchMessage
中先callback
如果为空,根据boolean handleMessage(Message msg)
的返回值,如果为true,说明已经处理,后面的不会再执行;如果为false
,会调用handler
自己的方法void handleMessage(msg) handler
即可收到消息内容
总结:handler
负责message
的发送,并把message
放在MessageQueue
队列中,Looper
负责接受message
并把处理好的message
回传给handler
自己