Android 12 - WMS 层级结构 && DisplayAreaGroup 引入
<h1 id="1-简介"><a href="#1-简介" class="headerlink" title="1. 简介"></a>1. 简介</h1><p>在 Android 窗口管理中,所有的窗口都是以树形数据结构进行组织管理的,认知这棵 WMS 的树有助于我们理解窗口的管理和显示,同时,WMS 的层级也决定了其在 <code>SurfaceFlinger</code> 的层级结构,这恰恰决定了它的显示规则。</p> <h1 id="2-WMS-顶层层级构建"><a href="#2-WMS-顶层层级构建" class="headerlink" title="2. WMS 顶层层级构建"></a>2. WMS 顶层层级构建</h1><p>在 Android 12 中,所有窗口树形管理都继基于 <code>WindowContainer,</code> 每个 <code>WindowContainer</code> 都有一个父节点和若干个子节点,我们先看看框架中 <code>WindowContainer</code> 都有哪些类型:</p> <p><img src="http://image.hanschen.site/master/2021-11-01-10-50-30.png" alt="2021-11-01-10-50-30"></p> <ul> <li>RootWindowContainer: 最顶层的管理者,直接管理 DisplayContent</li> <li>DisplayContent: 代表着一个真实或者虚拟的显示设备,在普遍场景中,系统中只存在一个 DisplayContent</li> <li>TaskDisplayArea: 是系统中所有应用任务的父节点,用于管理 Task</li> <li>Task: 代表着一个任务</li> <li>ActivityRecord: 代表一个 Activity 节点</li> <li>WallpaperWindowToken: 代表壁纸节点</li> <li>…</li> </ul>