
在创建Handler对象的时候,可以到第201行,Looper.myLooper()返回了一个Looper对象。再通过mLooper.mQueue获取到了MessageQueue.而且在202行中可以看到,创建Handler对象之前,必须保证Looper的存在

而当Handler发送信息,最终会调用enqueueMessage这个方法,可以看到657行,Handler自身作为msg.target传入,queue则就是一开始Looper获取的MessageQueue。这样子就把handler的时间传递给了MessageQueue队列当中
在创建Handler的时候,看到了Looper.myLooper(),先去看看这个方法里面到底执行了什么

查看这个方法以后,发现是直接返回了当前线程的Looper对象。

再看看Looper.loop()方法,135行在做一个死循环,136行取出下一个Message,154行msg.target.dispatchMessage(msg); msg.target就是我们一开始传递进去的Handler
网友评论