手记

【学习打卡】第13天 Handler 的四大组件和运作机制

课程名称:BAT大牛亲授技能+技巧 Android面试快速充电升级
课程章节:Android基础相关面试问题
主讲老师:DocMike

课程内容

Handler 的四大组件和运作机制

Android 中处理异步消息的 Handler 解决了线程通信问题,以及线程切换问题,通常包括以下四部分:

  1. Handler,消息的真正处理者, 具备获取消息、发送消息、处理消息、移除消息等功能。
  2. Looper,负责从消息队列中循环的取出消息然后把消息交给 Handler 处理。
  3. MessageQueue,以队列的形式对外提供插入和删除的工作, 其内部结构是以双向链表的形式存储消息的。
  4. Message,代表一个行为what或者一串动作 Runnable , 每一个消息在加入消息队列时,都有明确的目标Handler。

Handler 的运作机制大概经历以下几个过程:

  • 当 Handler 发送消息时,会将此消息加入消息队列 MessageQueue 中。
  • Looper 负责去遍历消息队列并且将队列中的消息分发给对应的 Handler 进行处理。
  • 在 Handler 的 handleMessage() 方法中处理该消息,这就完成了一个消息的发送和处理过程。

对照上面的过程查看 Handler 源码:

  • 在创建 Handler 对象时,有一段异常提示,调用 Looper.prepare()方法来创建Looper对象,来保证Handler发送的消息添加到MessageQueue中。
  • Looper管理消息就是通过prepare()方法中ThreadLocal这个容器来存放Looper对象,通过ThreadLocal这个容器可以确保每一个线程获取的Looper是唯一的。在looper的构造方法中创建looper对象的时候MessageQueue也被创建好了就能保证looper对象中持有MessageQueue对象这样Handler、looper、消息队列三者捆绑。

课程收获

对于 Handler 的理解,不能只停留在使用层面上,还要去了解它的实现原理。这样不仅能在面试时加分,以后在设计自己的框架时,也可以参考它的设计思想。

2人推荐
随时随地看视频
慕课网APP