Handler作为android入门来讲是相当重要的,感觉自己快忘光了,在学习Spring的时候同时来复习一下。
执行流程其实很简单:
首先,当Handler被创建的时候就发送了一个新消息
发送至MessageQueue,Looper这个类就开始进行遍历MessageQueue,并从中取出Message,执行Runnable方法。这里面可以看出Looper是一直在进行循环遍历的,也就是死循环,但是它并不会卡死,这与它的执行机制有关。
Linux pipe/epoll机制:在主线程MQ没有消息的时候,使阻塞在loop的queue.next()
中的nativePollOnce()方法里,此时主线程会释放CPU资源进入休眠状态,直到下个消息到达或者有事务发生,通过往pipe管道写端写入数据来唤醒主线程的工作。
这种 呼之即来 挥之即去的方式 避免了的死循环。
此处脑内过一遍,接下来看下主要代码。。。。
mLooper = Looper.myLooper() 即创建了Looper
Handler类中:
public Handler(Callback callback, boolean async) {
if (FIND_POTENTIAL_LEAKS) {