本文通过图片的方式来剖析handler的发送和处理消息的过程,文中着重讲解过程,需要你先了解MessageQueue,Looper,Message,Handler
Looper,一个循环类,prepare后线程变成一个looper线程,维护着一个MessageQueue对象,用来存放Handler发送的Message
MessageQueue
MessageQueue正如名字,是个消息队列,用于临时保存Handler的message和取出message,主要操作有两个,添加和读取
添加:enqueueMessage(Message msg,long when),简单的将消息添加到MessageQueue
读取:next(),返回message对象,返回给looper处理,该方法是一个死循环,一直读取数据,如果没有就会一直阻塞,有就返回message,
-
what:int型,最主要的属性,用于指定消息的类型,这算是Message唯一一个必须指定的值
-
arg0,arg1:两个int型值,一般用来传递一些progress,或者一些简单的整型
-
obj:可以传递一些复杂一些的object
-
data:Bundle型,这个就不用多解释了,传递较多种数据的时候肯定会用到它
-
callback:Runable型,Handler.post(Runnable)内部就是设置的这个属性,这个一般不会手动设置,但是也会用到,只是我们感觉不到,下面会详细解释,用于覆盖Handler的默认处理逻辑
.
Handler我们平时经常接触,用它来发送信息和处理信息
(1)创建一个自定义的Handler继承Handler,并重写handlerMessage()方法
(2)直接使用默认的Handler类,但是在新建Handler对象时,传入一个CallBack对象
下面上图