【技术梳理】Android的消息机制

565 阅读2分钟

什么是消息机制(What)

它是Android系统消息通信的基础, 贯穿于Android FrameWork的方方面面。个人观点:它应该是Android系统设计者为了满足系统消息通信封装了这样一种消息机制。消息机制由Handler,Message,Looper,MessageQueue四大核心类构成。

Handler:负责消息的构建,分发,消息的处理

Looper:持有一个线程,负责消息循环的启动,循环的维护

MessageQueue:负责消息的入队,排序, 线程的阻塞,唤醒

相关元素简要静态图如下:

消息机制静态图.png

提到消息机制,不得不提到HandlerThread。HandlerThread 是基于Handler,Message,Looper封装了一套异步线程消息分发机制

消息机制的作用(Why)

Android消息机制的核心目的是构建一套消息分发机制,满足系统所需,同时暴露给开发者, 方便开发者处理与主线程通信,封装了HandlerThread方便开发者构建自己的异步消息队列。

需要了解的细节

mainLooper:每个应用进程启动时,由ActivityThread触发启动主线程的消息循环

消息队列的阻塞唤醒机制:

阻塞时机:

① messageQueue next 查找下一个消息时,如果找到合适执行消息,则将消息分发给对应的Handler处理,否则阻塞该线程,释放CPU

唤醒时机

① 当有Handler向messageQueue入队消息的时候,会按需唤醒线程

image.png

② 当MessageQueue next找到一个延时消息时,先阻塞线程,释放CPU,等到超时时间后,重新唤醒线程

image.png

message如何排序的:enqueueMessage 按执行时间 (入队时间+delayer时间)排序,具体参见如下源码

同步消息屏障: 同步消息屏障,提供了消息队列消息加急处理的机制

为加急队列中某些消息处理的优先级,可以向messagequeue 发送一个同步消息屏障,这样队列排在消息屏障之后的Asyncronos的消息会优先得到处理。重点关注MessageQueue的next 逻辑

image.png