1. 简介
在 Android 窗口管理中,所有的窗口都是以树形数据结构进行组织管理的,认知这棵 WMS 的树有助于我们理解窗口的管理和显示,同时,WMS 的层级也决定了其在 SurfaceFlinger
的层级结构,这恰恰决定了它的显示规则。
2. WMS 顶层层级构建
在 Android 12 中,所有窗口树形管理都继基于 WindowContainer,
每个 WindowContainer
都有一个父节点和若干个子节点,我们先看看框架中 WindowContainer
都有哪些类型:
- RootWindowContainer: 最顶层的管理者,直接管理 DisplayContent
- DisplayContent: 代表着一个真实或者虚拟的显示设备,在普遍场景中,系统中只存在一个 DisplayContent
- TaskDisplayArea: 是系统中所有应用任务的父节点,用于管理 Task
- Task: 代表着一个任务
- ActivityRecord: 代表一个 Activity 节点
- WallpaperWindowToken: 代表壁纸节点
- …