Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。
Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message msg)方法来对特定的Message进行处理,例如更新UI等。
MessageQueue:消息队列,用来存放Handler发送过来的消息,并按照FIFO规则执行。当然,存放Message并非实际意义的保存,而是将Message以链表的方式串联起来的,等待Looper的抽龋
Looper:消息泵,不断地从MessageQueue中抽取Message执行。因此,一个MessageQueue需要一个Looper。
Thread:线程,负责调度整个消息循环,即消息循环的执行场所。
一、Handler,Message,Looper关系
首先将一个Message对象通过Handler发送到MessageQueue中,Looper负责从MessageQueue中取出Message,执行handleMessage中的方法体。
二、Looper和Thread关系
Looper依赖Thread,Looper只是一个消息循环体,它空有一段代码。只有Looper的代码跑在Thread中,才是一个真正的消息循环。(这点如同学习操作系统的进程和函数差不多,其实也就是那么回事儿)
对于一个Android而言,每一个界面都有一个默认的Thread、消息循环体Looper和Handler。
调用new Handler()可以获得当前线程的Handler
调用Looper.myLooper()可以获得当前线程的Looper。