外观
如何理解Handler、Looper 与消息队列?
标准回答
Looper 在所属线程持续取出并处理消息,Handler 绑定某个 Looper,发送消息或 Runnable 到对应队列。new Handler 不会凭空创建工作线程,目标 Looper 应显式清楚;主线程 Handler 的回调仍在主线程执行。
延迟消息表示最早可执行时间,还会受前面工作、线程调度和队列机制影响,并不是准确的定时保证。消息持有回调或对象引用,长延迟任务可能延长 Activity 生命周期;移除无用消息、使用合适作用域并校验状态比只换成弱引用更完整。
同步屏障和异步消息是 Android 绘制调度相关机制,异步 Handler 不是后台线程。重任务即使以异步消息形式运行,也会占用目标线程。原理与目标版本源码结合,避免用优先消息绕开正常时序却造成饥饿。
追问与回答
为什么 Looper 循环没有一直吃满 CPU
没有可运行消息时可等待底层事件,不是无条件忙轮询;高 CPU 应检查频繁消息或具体回调。
postDelayed 是否适合心跳绝对计时
只能提供受调度影响的触发,应以单调时间计算实际间隔并处理迟到,不能累计假定每次恰好间隔固定值。
易混淆点
- 把 Handler 的异步消息误认为在后台执行。
参考资料
内容来源
- Android 与 AI 工程 Wiki · 原条目
q195