- DisplayArea:用于对DisplayContent中的节点进行分组管理,主要分为了三类;
- Root:DisplayArea的子类,该容器作为DisplayContent中最顶层的显示区域,用来保存Tokens、TaskDisplayArea、ImeContainer容器;
- TaskDisplayArea:DisplayArea的子类,此类容器用于管理Task;
- Tokens:DisplayArea的子类,该容器用来保存正常窗口的WindowToken;
- ImeContainer:Tokens的子类,该容器用来保存IME窗口的WindowToken;
- Task:用来保存ActivityRecord,即我们常说的"任务";
- ActivityStack:Task的子类,用来管理处于同一个栈的Activity,特殊栈可以保存Task;
- WindowToken:用来管理窗口,多个窗口可以被一个WindowToken进行管理;
- ActivityRecord:继承于WindowToken,表示ActivityStack中的一个Activity实例;
- WallpaperWindowToken:继承于WindowToken,壁纸窗口比较特殊,因此由WallpaperWindowToken进行管理;
- WindowState:窗口对象实例;
DisplayArea是Android R上新添加的容器,目的就是将复杂的窗口层级管理简单化、低耦合。
而在树结构中,各个容器结构如下:
可以看到,在树结构中,根节点为RootWindowContainer,叶子节点为WindowState。 正是通过这种结构,WMS中将系统中所有的窗口显示管理得井井有条,并将所有窗口以Surface的形式送到SurfacaFlinger中进行合成和显示。
2.WMS启动流程
接下来我们看下WM