Skip to content
阅读进度

如何理解Handler、Looper 与消息队列? ​

返回 Java 与并发 目录

标准回答 ​

Looper 在所属线程持续取出并处理消息,Handler 绑定某个 Looper,发送消息或 Runnable 到对应队列。new Handler 不会凭空创建工作线程,目标 Looper 应显式清楚;主线程 Handler 的回调仍在主线程执行。

延迟消息表示最早可执行时间,还会受前面工作、线程调度和队列机制影响,并不是准确的定时保证。消息持有回调或对象引用,长延迟任务可能延长 Activity 生命周期;移除无用消息、使用合适作用域并校验状态比只换成弱引用更完整。

同步屏障和异步消息是 Android 绘制调度相关机制,异步 Handler 不是后台线程。重任务即使以异步消息形式运行,也会占用目标线程。原理与目标版本源码结合,避免用优先消息绕开正常时序却造成饥饿。

追问与回答 ​

为什么 Looper 循环没有一直吃满 CPU ​

没有可运行消息时可等待底层事件,不是无条件忙轮询;高 CPU 应检查频繁消息或具体回调。

postDelayed 是否适合心跳绝对计时 ​

只能提供受调度影响的触发,应以单调时间计算实际间隔并处理迟到,不能累计假定每次恰好间隔固定值。

易混淆点 ​

  • 把 Handler 的异步消息误认为在后台执行。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。