树形结构
WindowContainer在frameworks/base/services/core/java/com/android/server/wm/WindowContainer.java中实现,其定义:
class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<E>
implements Comparable<WindowContainer>, Animatable, SurfaceFreezer.Freezable, BLASTSyncEngine.TransactionReadyListener
其中泛型E是WindowContainer容器包含的元素类型,E可以是WindowContainer及其子类。
因此WindowContainer是树形结构,其整体结构(注意不是类的继承关系)如下图所示:
RootWindowContainer
public class RootWindowContainer extends WindowContainer<DisplayContent> implements DisplayManager.DisplayListener
在WindowManagerService中有一个类型为RootWindowContainer的成员变量mRoot。
DisplayContent
class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowContainer> implements WindowManagerPolicy.DisplayContentInfo
包括一个屏幕中的所有窗口。
DisplayChildWindowContainer
static class DisplayChildWindowContainer<E extends WindowContainer> extends WindowContainer<E>
WindowContainers
private class WindowContainers extends DisplayChildWindowContainer<WindowContainer>
NonAppWindowContainers
private class NonAppWindowContainers extends DisplayChildWindowContainer<WindowToken>
WindowToken
class WindowToken extends WindowContainer<WindowState>
ActivityRecord
public final class ActivityRecord extends WindowToken implements WindowManagerService.AppFreezeListener
是一个Activity的状态。
WallpaperWindowToken
class WallpaperWindowToken extends WindowToken
WindowState
class WindowState extends WindowContainer<WindowState> implements WindowManagerPolicy.WindowState, InsetsControlTarget
Task
public class Task extends WindowContainer<WindowContainer>
ActivityStack
public class ActivityStack extends Task
管理一个活动栈的状态。
DisplayArea
public class DisplayArea<T extends WindowContainer> extends WindowContainer<T>
出现在DisplayContent下,用来给WidnowContainer分组。
TaskDisplayArea
final class TaskDisplayArea extends DisplayArea<ActivityStack>
表示包括app窗口容器的屏幕区域。
Tokens
public static class Tokens extends DisplayArea<WindowToken>。
Root
public static class Root extends DisplayArea<DisplayArea>
是在DisplayContent下所有DisplayArea的根。
ImeContainer
private static class ImeContainer extends DisplayArea.Tokens
包括输入法窗口的容器。