Handle机制总结

1. handle机制的四个对象

我们通过handle的使用,debug源码调试,以及源码分析其流程,其实handle机制很简单,主要是需要搞出清楚其核心的四个对象:Message, Handle,MessageQueue,Looper。

handle的机制主要涉及到四个对象:

  1. Message对象:封装消息对象,并且通过target持有handler,将消息与handle进行绑定
  2. Handle对象:负责发送消息和处理消息。
  3. MessageQueue对象:消息队列对象,负责存取管理消息顺序,以先进先出的方式存取的Message对象,
  4. Looper对象:消息轮询,轮询管理消息队列,负责轮询从消息队列中取出Message对象

下面通过一张图来总结这个四个对象的流程关系
Handle机制总结

几个核心问题?

1. handle是如何进行对象绑定的?
Handler创建的时候会创建一个Looper对象,looper对象又会创建一个MeesageQuenu对象,这样就将Handle,Looper,MessageQuenue绑定在一起,handle添加消息的时候,会将自己(handle)绑定到Message的target中,这样串起来就将Handle,Looper,MessageQueue,Message四个对象绑定在一起了。
2. 消息内部存储结构?
消息是通过MessageQueue对象,messageQueue 数据结构是单链表结构,不是队列结构。
3. Looper的是在哪个线程运行的?
一般如果我们之间在UI主线程中创建handler这时候会默认创建一个主线程的Looper对象,对应Looper也是运行在主线程的。

2.源码分析

下面我们可以通过阅读查看Handle机制的关键源码从而理清相关关系。
我们前面提到了handle机制关键对象是Handle、Looper、Message、MessageQuenu,下面我们就从这个四个核心类进行分析。
首先是handle创建:
Handle机制总结

  1. handle创建的时候会获取一个Looper对象(没有还没创建,则会通过Looper.prepare创建一个Looper)
  2. 如果handle是在主线程中创建的,那么这时候创建的Looper对象也是在主线程的。

Looper对象的创建
Handle机制总结
Looper创建的时候会创建MessageQueue,looper持有MessageQueue对象
Handle机制总结

至此Handler,Looper, MessageQueue创建并绑定完成了,
下面分析消息处理分发流程

1. handler发送消息:
将handler绑定到Message对象的target中,同时将消息Message添加到MessageQueue中.
Handle机制总结

2. Looper的轮询从MessageQueue中获取消息
Handle机制总结
3. handler分发消息(处理消息)
Handle机制总结
到此我们针对Handle机制的四个核心类以及源码主干流程简析已经完成,因本文书写时间和水平有限,如有有错误及不足之处,烦请指出。如果能帮助到正在阅读的你,也希望能够得到你的支持和鼓励,欢迎点赞,收藏,评论,转发。。。。谢谢。

相关文章: