Skip to content
阅读进度

主线程 Looper 一直循环 为什么不会一直占用 CPU? ​

返回 Java 与并发 目录

标准回答 ​

Looper 在没有可执行工作时会进入 nativePollOnce 等等待路径,底层通过 poll 或 epoll 等机制等待事件或超时,线程处于阻塞而非持续忙轮询。新消息、到期消息或输入等事件会让线程继续处理。消息循环持续存在并不等于 CPU 持续繁忙,真正影响响应的是某个任务执行过久、队列积压或唤醒异常。排查时我会结合线程状态,区分 Running、可运行但未被调度和阻塞等待。

延伸追问 ​

主线程栈停在 nativePollOnce 常常表示当下空闲,单凭这一帧栈不能认定它就是 ANR 根因。

内容来源 ​

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