从MessageQueue视角理解Handler

本文适合对Handler有过了解,~~即使又忘了。~~但对网上的<<loop轮询转圈图>>有点印象的玩家。

前置概念


同步屏障消息

  1. 作用:系统使用的特殊的消息,可以看作优先处理异步消息的标识,当MessageQueue的队首是同步屏障消息时,忽略同步消息,一直执行最近的异步消息。通过postSyncBarrier/removeSyncBarrier增删同步屏障消息,非手动移除不会自动移除。
  2. 特点:target属性为空的Message就是同步屏障消息
  3. 事例:ViewRootImpl.scheduleTraversals 优先处理异步消息

IdleHandler

  1. 作用:闲时Handler,在没有消息或消息未到触发时机这样的闲时,执行的操作。
  2. 特点:是MessageQueue的静态接口,使用时复写boolean queueIdle()的方法执行闲时操作,返回值表示执行后是否保持存活状态。

epoll

Linux IO模式及 select、poll、epoll详解

正文


废话一下基本原理先

使用者通过Handler外部暴露的方法,向处于目标线程TLSLooper内的消息队列输入消息;

消息队列及时/延时地取出消息,并分发处理。以达到调度或延时地操作。

Handler通过MessageQueue.enqueueMessage(msg,when)入队消息

Looper.loop通过MessageQueue.next()出队消息

MessageQueue

MessageQueue的关键变量mMessages

消息队列实例,把消息根据触发时机早晚排列。具体代码表现为单链表的节点,代指队首(链表头)消息。

next

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享