什么是消息机制(What)
它是Android系统消息通信的基础, 贯穿于Android FrameWork的方方面面。个人观点:它应该是Android系统设计者为了满足系统消息通信封装了这样一种消息机制。消息机制由Handler,Message,Looper,MessageQueue四大核心类构成。
Handler:负责消息的构建,分发,消息的处理
Looper:持有一个线程,负责消息循环的启动,循环的维护
MessageQueue:负责消息的入队,排序, 线程的阻塞,唤醒
相关元素简要静态图如下:
提到消息机制,不得不提到HandlerThread。HandlerThread 是基于Handler,Message,Looper封装了一套异步线程消息分发机制
消息机制的作用(Why)
Android消息机制的核心目的是构建一套消息分发机制,满足系统所需,同时暴露给开发者, 方便开发者处理与主线程通信,封装了HandlerThread方便开发者构建自己的异步消息队列。
需要了解的细节
mainLooper:每个应用进程启动时,由ActivityThread触发启动主线程的消息循环
消息队列的阻塞唤醒机制:
阻塞时机:
① messageQueue next 查找下一个消息时,如果找到合适执行消息,则将消息分发给对应的Handler处理,否则阻塞该线程,释放CPU
唤醒时机:
① 当有Handler向messageQueue入队消息的时候,会按需唤醒线程
② 当MessageQueue next找到一个延时消息时,先阻塞线程,释放CPU,等到超时时间后,重新唤醒线程
message如何排序的:enqueueMessage 按执行时间 (入队时间+delayer时间)排序,具体参见如下源码
同步消息屏障: 同步消息屏障,提供了消息队列消息加急处理的机制
为加急队列中某些消息处理的优先级,可以向messagequeue 发送一个同步消息屏障,这样队列排在消息屏障之后的Asyncronos的消息会优先得到处理。重点关注MessageQueue的next 逻辑