WMS 专项 - 底层支撑系统 (SurfaceFlinger, Input, View)

WMS 的运行并非孤立,它深度依赖于图形合成、输入分发和视图系统。理解这些支撑系统,是掌握 WMS 源码逻辑的基石。


1. SurfaceFlinger:WMS 的图形“甲方”

WMS 负责管理窗口的逻辑层级,而 SurfaceFlinger 负责将这些层级真实地合成并渲染到屏幕上。

核心考点 详细解析 学习目的
图形缓冲区 (BufferQueue) Surface 内部维护的生产者-消费者模型队列。 理解应用绘制的数据是如何传递给 SurfaceFlinger 的。
Layer (层) SurfaceFlinger 内部对窗口的映射,每个窗口对应一个 Layer。 理解 WMS 的 WindowState 最终是如何映射为渲染层的。
合成原理 (Composition) VSync 触发,将多个 Layer 按照 Z-Order 合并。 掌握 Android 60/120 fps 流畅度的物理基础。

2. Input 系统:事件分发的“中转站”

WMS 协助 InputManagerService (IMS) 将触摸事件分发到正确的窗口。

核心考点 详细解析 学习目的
IMS 与 Socket 通信 IMS 通过 InputChannel(基于 Unix Domain Socket)与应用通信。 理解为什么输入事件分发不使用 Binder。
窗口定位 WMS 维护全局窗口位置,告知 IMS 哪个坐标对应哪个窗口。 理解点击屏幕后,系统如何“定位”到你的按钮。
事件分发链 IMS -> WMS (定位) -> ViewRootImpl -> DecorView -> ViewGroup -> View。 建立完整的事件分发全景图。

3. View 系统:WMS 的“应用端代理”

应用端通过 View 系统与 WMS 建立联系。

核心考点 详细解析 学习目的
ViewRootImpl 整个 View 树的根节点,负责与 WMS 的 Session 进行 IPC 通信。 理解 WindowManager.addView 背后的第一站。
DecorView 窗口的根视图,包含状态栏和内容区。 明确 Activity 布局的物理边界。
Measure/Layout 触发 relayoutWindow 成功后,WMS 反向驱动应用端执行绘制。 理清“系统驱动”与“应用主动”的逻辑闭环。

4. 总结:三大系统与 WMS 的协作关系

  • WMS + SurfaceFlinger:解决“在哪里画,画多大”的问题。
  • WMS + Input 系统:解决“谁接收点击”的问题。
  • WMS + View 系统:解决“具体画什么”的问题。

掌握了这三者的协作,就掌握了 Android 系统 UI 展示的核心脉络。

, ,