外观
VSync、Choreographer#doFrame 与每帧预算是什么关系?
标准回答
每次显示刷新周期约为 1000 / 刷新率 毫秒:60Hz 约 16.67ms,90Hz 约 11.11ms,120Hz 约 8.33ms。Choreographer 在有待执行帧工作时响应 VSync 调度 doFrame,推进输入、动画和遍历等回调;CPU、GPU、合成协作完成帧,不能把整个周期都当成应用主线程可独占的预算。
通俗例子
60Hz 相邻刷新约 16.7ms,120Hz 约 8.3ms。主线程某次执行 30ms,可能错过显示机会;实际流水线还包含 RenderThread、GPU 和合成。
深入解释
**显示节拍怎么传到应用:**VSync 提供显示相关的节奏信号,Choreographer 在需要更新界面时协调输入、动画、遍历等帧回调。doFrame 是应用处理一帧工作的入口,不是屏幕已经显示的通知。
**为什么超过预算会卡:**60Hz 一次刷新间隔约 16.7ms,120Hz 约 8.3ms;应用、GPU 和合成还需按流水线完成工作。关键阶段错过截止时刻,画面就可能晚一轮或更多轮显示。
易混淆点
不是每次 VSync 都必须产生新的应用画面,16ms 也不是所有屏幕的固定预算。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
3.6.4