Skip to content
阅读进度

Looper 的循环为什么不会把 CPU 跑满? ​

返回 Java 与并发 目录

标准回答 ​

消息循环不是无休止执行空转代码。没有可执行消息时,底层会等待消息或相关事件,线程进入等待状态;新任务到来或等待时间到期后再被唤醒。真正的卡顿往往是某次任务执行太久,后续输入和绘制任务排队。

机制解释 ​

判断主线程时要区分 Running、Runnable 与等待状态。Running 表示正在使用 CPU;Runnable 表示想运行但还没得到 CPU;等待可能是消息队列正常空闲,也可能是等锁、Binder 或 I/O。它们需要不同优化手段。

延伸追问 ​

堆栈显示 nativePollOnce 就说明问题在那里吗?不一定,采样时主线程可能已经空闲。需结合问题发生时间和完整 Trace,避免把采样位置当作根因。

内容来源 ​

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