外观
VSync 不停发生 应用为什么不会一直 doFrame?
标准回答
显示系统有自己的刷新节奏,应用则在存在待处理帧工作时通过 Choreographer 等机制申请帧调度。典型 doFrame 在主线程处理输入相关回调、动画、遍历等工作;静止且没有待处理帧任务时,不需要每个刷新周期都执行一次完整绘制。
机制解释
60Hz、90Hz、120Hz 的周期约为 16.67ms、11.11ms、8.33ms,但具体帧截止时间还要结合流水线和系统调度分析。doFrame 结束不是像素已经出现在屏幕上,之后还涉及 RenderThread、GPU、合成和呈现。(FrameTimeline 与卡顿分析)
延伸追问
主线程空闲就一定不卡吗?不一定,还可能是 RenderThread、GPU、SurfaceFlinger 或调度链路问题。定位时关联 FrameTimeline 与实际线程活动,不能只盯一个 doFrame 耗时。
内容来源
- Android 智能硬件 SDK 技术 Wiki · 原条目
Q16