android-屏幕-刷新流程
Android 屏幕刷新是一个涉及硬件、系统服务和应用的协同过程,核心目标是保证画面流畅且避免撕裂。其关键流程如下:
-
刷新触发:VSync 信号
- 屏幕硬件完成一帧画面的逐行扫描(从左到右,从上到下)后,会发出垂直同步信号(VSync),标志着一个垂直消隐(VBlank)间隔的开始。
- 此信号是刷新周期的起点,驱动整个显示流水线同步运作。
-
应用层响应:UI 绘制
- Android 系统的
Choreographer
组件会监听 VSync 信号。 - 收到 VSync 信号后,
Choreographer
会回调应用的onDraw()
方法,触发 UI 树(View 树)的测量(Measure)、布局(Layout)和绘制(Draw)操作。 - 应用的绘制结果(位图)会被提交到
Surface
关联的BufferQueue
的生产者缓冲区(Producer Buffer)中。
- Android 系统的
-
系统合成:SurfaceFlinger
SurfaceFlinger
(系统合成服务)也在监听 VSync 信号。- 在 VSync 信号到来时,
SurfaceFlinger
会被唤醒。 - 它遍历所有需要显示的
Surface
(对应各个应用窗口或系统 UI),检查其BufferQueue
中是否有准备好的新帧缓冲区(Buffer)。 - 如果有新帧可用,
SurfaceFlinger
会将所有必要的 Buffer 数据交给硬件混合渲染器(HWC)进行最终合成(或自行进行 GPU 合成)。
-
硬件显示:帧提交
- 合成后的最终帧数据被放置到显示控制器指定的帧缓冲区(Frame Buffer)中。
- 在下一个 VSync 信号到来时(标志着 VBlank 结束),显示控制器(Display Controller)会将此 Frame Buffer 中的数据取出,开始新一帧的逐行扫描显示过程。
关键机制解析:
- 双缓冲(Triple Buffering): 系统使用至少两个缓冲区(通常称为“前缓冲”和“后缓冲”)来避免画面撕裂和提升效率。
- GPU 渲染: GPU 将应用绘制的内容渲染到“后缓冲”。
- 缓冲区交换: VSync 信号到来时,系统交换“前缓冲”和“后缓冲”。此时,“前缓冲”的内容被送交显示,“后缓冲”则变为空闲供 GPU 渲染下一帧。
- 三缓冲: 在高负载场景下引入第三个缓冲区,允许 GPU 在上一帧尚未显示完时就开始渲染更下一帧,进一步减少卡顿。
- 掉帧(Jank): 如果在 VSync 信号到来时,GPU 未能完成当前帧的渲染(耗时超过 16.6ms @60Hz),缓冲区无法交换。屏幕将继续显示上一帧的内容,直到下一个 VSync 信号到来且新帧准备就绪。这导致了用户感知到的卡顿或掉帧。
- 画面撕裂(Tearing): 如果未使用 VSync 同步机制,在屏幕扫描显示的过程中,显示器读取的缓冲区数据可能被 GPU 中途更新,导致一帧画面上下部分显示的是不同帧的数据,即撕裂现象。VSync 和双缓冲机制有效地解决了这个问题。
总结流程表:
阶段 | 主要参与者 | 关键动作 | 触发点 |
---|---|---|---|
1. 扫描完成 | 屏幕硬件 | 完成当前帧扫描,发出 VSync 信号,进入 VBlank 期 | 扫描线归位 |
2. 应用绘制 | 应用、Choreographer | 收到 VSync, 执行 onDraw() ,提交新帧到 BufferQueue | VSync 信号 |
3. 表面合成 | SurfaceFlinger、HWC | 收到 VSync, 收集各 BufferQueue 新帧,进行图层合成 | VSync 信号 |
4. 缓冲区交换 | 系统 | 交换前后缓冲区 (或标记合成结果到帧缓冲) | VSync 信号 |
5. 新帧扫描显示 | 显示控制器、屏幕 | 从帧缓冲取出数据,开始新一帧的逐行扫描显示 | VSync 信号 |
引用链接:
1.【Android】屏幕刷新机制(概览) - CSDN博客
2.Android VSync 核心机制深入解读 - 掘金开发者社区
3.android屏幕刷新之一_如何根据 trace 图形日志分析界面刷新和bufferqueue问题-CSDN博客 - CSDN博客
4.Android屏幕刷新机制—VSync、Choreographer-全面理解! - CSDN博客
5.屏幕刷新原理 - 无我
6.Android的VSYNC机制和UI刷新流程示例详解 - 脚本之家
7.“终于懂了” 系列:Android屏幕刷新机制—VSync、Choreographer 全面理解! - 51CTO博客
8.Android 屏幕刷新机制 - 掘金开发者社区
9.Android 设置屏幕刷新率 - 51CTO博客
10.手机怎么刷新? - 爱奇艺
11.小米14,小米14Pro首发实测,骁龙8gen3刷新安卓最强 - 哔哩哔哩
12.Android渲染机制之多缓冲和VSYNC - 哔哩哔哩
13.手机高刷在哪里设置 - 技术精英
14.华为手机怎么刷新一下 - 研阁间
15.华为手机刷新率怎么设置 - 有文故事坊
16.华为手机刷新怎么刷新 - 车研智库
17.华为高刷在哪设置 - VicFrame
18.手机怎么刷屏 - 力学侠解难题
19.华为手机怎么刷新页面 - Sherry环球投基
20.深入浅出:Android屏幕刷新机制_android ondisplaychanged-CSDN博客 - CSDN博客
21.android 品目刷新 android屏幕刷新机制 - 51CTO博客