Handler过程剖析-傻瓜都能看懂的过程图

本文通过图片的方式来剖析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对象


下面上图

Handler过程剖析-傻瓜都能看懂的过程图_第1张图片Handler过程剖析-傻瓜都能看懂的过程图_第2张图片Handler过程剖析-傻瓜都能看懂的过程图_第3张图片

你可能感兴趣的:(Handler过程剖析-傻瓜都能看懂的过程图)