Android的线程间通信Hanlder、Looper、Message、MessageQueue

一、先来一个总结性的语言,然后再细分析。

(1)、当我们调用handler.sendMessage(msg)方法发送一个Message时,实际上这个Message是发送到与当前线程绑定的一个MessageQueue中,然后与当前线程绑定的Looper将会不断的从MessageQueue中取出新的Message,调用msg.target.dispathMessage(msg)方法将消息分发到与Message绑定的handler.handleMessage()方法中。
(2)、一个Thread对应多个Handler ,一个Thread对应一个Looper和MessageQueue,Handler与Thread共享Looper和MessageQueue。 Message只是消息的载体,将会被发送到与线程绑定的唯一的MessageQueue中,并且被与线程绑定的唯一的Looper分发,被与其自身绑定的Handler消费。

再形容的表达一下就是:

MessageQueue:装食物的容器
Message:被装的食物
Handler(msg.target实际上就是Handler):食物的消费者
Looper:负责分发食物的人

二、下面贴出一个图展示一下它四个之间的关系。

Android的线程间通信Hanlder、Looper、Message、MessageQueue

三、下面介绍一下咱们日常用的的这个四个类,也就是主线程绑定的。

主线程在创建时,系统就创建了与主线程绑定额Looper、MessageQueue。而主线程还有一个Handler,就是内部类 H,其继承 Handler。当ActivityThread的main方法运行时,Looper就进入了死循环,去处理整个应用Message。而应用的绘制界面,等主线程的处理也是通过H而进行消化的。当Looper退出循环时,也就意味着应用程序退出程序。


相关文章链接,我觉的写的比较深层次的。

http://blog.csdn.net/u013435893/article/details/50903082

http://www.cnblogs.com/lao-liang/p/5073257.html

http://blog.csdn.net/luoshengyang/article/details/6768304