Handler消息机制
Looper.prepare()
其实里面是new 了一个Looper,而new Looper里面是创建了一个消息队列
Looper.loop() 消息循环
记住:一个线程对应一个Looper对象;然后在创建Looper的时候创建了一个MessagQueue消息队列管理消息的入栈和出栈,也是一个线程对应一个MessagQueue;
执行Looper.loop方法让该线程创建一个死循环,不断的调用Message msg = queue.next();来从消息队列里面取出消息,并进行处理:msg.target.dispatchMessage(msg)
那么Handler,Looper,Message之间的关系就是:handler负责不断发送message到MessageQueue;Looper将消息队列中的消息一个一个取出回调给dispatchMessage方法;最后消息回到handler所在的线程,通过handler的callback方法进行处理。
在ActivityThread中不仅实现了Looper.prepareMainLooper()方法我们还看到
有个Looper.loop()方法
异步消息处理机制流程示意图
Android 中的异步消息处理主要由4 个部分组成:
Message 、Handler 、MessageQueue 和Looper