WMS 不仅管理窗口逻辑,还是图形渲染的“中转站”。它协助应用获取绘制所需的画布 —— Surface。
1. Surface 的本质
在 Android 中,Surface 对应 SurfaceFlinger 中的一个 Layer。它本质上是一块图形缓冲区队列(BufferQueue)的生产者端。
2. 创建流程:从 WMS 到 SurfaceFlinger
| 角色 | 执行动作 |
|---|---|
| 应用进程 | 在 relayout 请求中设置 SURFACE_CREATING 标志。 |
| WMS | 调用 WindowSurfaceController 开始创建流程。 |
| SurfaceControl | WMS 与 Native 层的桥梁,向 SurfaceFlinger 申请创建 Layer。 |
| SurfaceFlinger | 分配内存缓冲区,并返回句柄。 |
3. 渲染“三步走”
- **申请 (Lock)**:应用通过
lockCanvas()或 EGL 申请缓冲区。 - **绘制 (Draw)**:应用调用
Canvas或 GPU 绘图指令。 - **提交 (Unlock & Post)**:将绘制好的缓冲区入队,通知
SurfaceFlinger进行合成显示。