Handler/Looper 核心类图
Handler/Looper 工作流程图
详细时序图
关键类说明
1. Looper 核心职责
- 线程单例: 通过ThreadLocal保证每个线程只有一个Looper
- 消息循环: loop()方法无限循环从MessageQueue取消息
- 主线程准备: prepareMainLooper()为主线程准备Looper
2. MessageQueue 核心功能
- 消息队列: 按时间顺序维护Message链表
- Native支持: 使用mPtr指向Native层的MessageQueue
- 空闲处理: 支持IdleHandler在队列空闲时执行
3. Handler 消息处理
- 消息发送: sendMessage(), post()等方法
- 消息分发: dispatchMessage()决定消息处理路径
- 线程切换: 实现跨线程通信
4. Message 消息对象
- 对象池: 使用obtain()从对象池获取,避免频繁创建
- 目标指向: target字段指向处理该消息的Handler
- 数据载体: what, arg1, arg2, obj, data等多种数据存储方式
设计要点
- 线程隔离: 每个线程有独立的Looper和MessageQueue
- 对象复用: Message对象池减少GC压力
- 时间排序: 消息按执行时间排序,支持延时消息
- 安全退出: quitSafely()确保所有消息处理完再退出
- 空闲优化: IdleHandler机制充分利用CPU空闲时间
这套机制是Android异步编程的核心基础,理解它对性能优化和问题排查都有重要意义。