Skip to content
阅读进度

SurfaceFlinger、HWC 与 SurfaceControl 各做什么? ​

返回 Framework 与系统服务 目录

标准回答 ​

SurfaceFlinger 是系统合成服务,接收窗口等来源的图层内容与状态,组织最终屏幕画面。HWC,也就是 Hardware Composer,提供与显示硬件相关的合成能力。两者协商哪些图层可以由设备硬件处理,哪些需要客户端合成,再把结果交给显示链路。

因此不能把 SurfaceFlinger 理解为总是用 GPU 把所有层重新画一遍。具体合成方式受硬件能力、图层内容、变换和效果影响,可能混合使用不同路径。

SurfaceControl 更偏向图层控制,可通过相应事务设置位置、透明度、裁剪等状态。它与用于生产内容的 Surface 职责不同。改变图层位置可能只需更新图层状态,不一定要求应用把窗口内所有按钮重新绘制一次;但新的内容、尺寸适配和生命周期仍需各自正确处理。

关键机制 ​

  • WMS 管窗口策略与状态;SurfaceFlinger 处理合成,两者协作但不是同一个服务。
  • 把相关属性放进同一事务有助于协调更新;事务提交不等于 GPU 已完成或像素已展示。
  • 能否使用特定 SurfaceControl 能力取决于 API、权限和系统环境,系统项目经验不能直接套到普通应用。

通俗例子 ​

跨屏过渡中,窗口内容不变而图层移动、alpha 渐变,可以主要改变图层状态;目标尺寸改变时,应用仍可能需要重新布局并生产适配后的内容。

追问与回答 ​

系统图层动画能在应用主线程卡住时继续吗? ​

如果动画由独立的系统侧时序驱动,并且可以复用已有图层内容,就可能继续变化。但应用需要更新文字、布局或业务状态时,主线程阻塞仍会让内容停住。看到窗口还在移动,只能证明那段图层动画在推进,不能证明应用交互正常。

易混淆点 ​

一个 Android View、一个应用窗口和一个系统合成图层并不存在通用的一对一关系。

参考资料 ​

内容来源 ​

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