本文适合对Handler有过了解,~~即使又忘了。~~但对网上的<<loop轮询转圈图>>有点印象的玩家。
前置概念
同步屏障消息
- 作用:系统使用的特殊的消息,可以看作优先处理异步消息的标识,当MessageQueue的队首是同步屏障消息时,忽略同步消息,一直执行最近的异步消息。通过
postSyncBarrier
/removeSyncBarrier
增删同步屏障消息,非手动移除不会自动移除。 - 特点:
target
属性为空的Message
就是同步屏障消息 - 事例:
ViewRootImpl.scheduleTraversals
优先处理异步消息
IdleHandler
- 作用:闲时
Handler
,在没有消息或消息未到触发时机这样的闲时,执行的操作。 - 特点:是
MessageQueue
的静态接口,使用时复写boolean queueIdle()
的方法执行闲时操作,返回值表示执行后是否保持存活状态。
epoll
Linux IO模式及 select、poll、epoll详解
正文
废话一下基本原理先
使用者通过Handler
外部暴露的方法,向处于目标线程TLS
的Looper
内的消息队列输入消息;
消息队列及时/延时地取出消息,并分发处理。以达到调度或延时地操作。
Handler
通过MessageQueue.enqueueMessage(msg,when)
入队消息
Looper.loop
通过MessageQueue.next()
出队消息
MessageQueue
MessageQueue的关键变量mMessages
:
消息队列实例,把消息根据触发时机早晚排列。具体代码表现为单链表的节点,代指队首(链表头)消息。
喜欢就支持一下吧
相关推荐