Android渲染(二)_从Window角度看Activity的启动(基于Android 10)
2024-01-20 05:39:16
如何深入理解 Android Activity 启动流程:WMS 如何创建 Window
当你打开一个 Android 应用程序时,你看到的第一个屏幕是由一个称为 Activity 的类显示的。Activity 是应用程序用户界面的基本构建块,它为用户提供与应用程序交互的界面。然而,Activity 本身并不是直接显示在屏幕上的。相反,它们是通过一个称为 Window 的特殊视图容器来显示的。
Window 的角色
Window 在 Android 系统中扮演着至关重要的角色。它充当 Activity 和屏幕之间的桥梁,允许 Activity 的内容在屏幕上渲染。每个 Activity 都与一个或多个 Window 相关联,这些 Window 定义了 Activity 在屏幕上的位置、大小和外观。
WMS 如何创建 Window
Window 是由一个称为 WindowManagerService (WMS) 的系统服务创建的。当 Activity 启动时,WMS 会执行以下步骤来创建 Activity 的 Window:
- 创建 WindowLayoutParams: 根据 Activity 的主题,WMS 创建一个 WindowLayoutParams 对象,该对象指定了 Window 的属性,如尺寸、位置和风格。
- 创建 Surface: WMS 调用 DisplayManagerService (DMS) 创建一个 Surface 对象,该对象是 Window 在屏幕上的像素缓冲区。
- 创建 Window: WMS 创建一个 Window 对象并将其附加到 DMS。
- 创建 ViewRootImpl: WMS 创建一个 ViewRootImpl 对象并将其附加到 Window。ViewRootImpl 是 Window 的根视图,负责管理 Window 中的所有视图。
Activity 生命周期与 Window
Activity 的生命周期与 Window 密切相关。当 Activity 创建时,WMS 为其创建一个新的 Window。当 Activity 销毁时,WMS 销毁与该 Activity 关联的所有 Window。当 Activity 暂停时,WMS 会从屏幕上移除 Window。当 Activity 恢复时,WMS 会将 Window 添加回屏幕。
窗口层级
Android 窗口系统使用层级结构来管理窗口。窗口可以位于不同的层级,高层级的窗口可以覆盖低层级的窗口。Activity 窗口通常位于最顶层,以确保用户可以看见 Activity 的内容。
常见问题解答
-
什么是 Window?
Window 是一个特殊的视图容器,允许 Activity 的内容在屏幕上渲染。 -
WMS 如何创建 Window?
WMS 根据 Activity 的主题创建 WindowLayoutParams,创建 Surface,创建 Window,并创建 ViewRootImpl。 -
Activity 生命周期如何影响 Window?
当 Activity 创建时,WMS 为其创建 Window。当 Activity 销毁时,WMS 销毁 Window。当 Activity 暂停时,WMS 从屏幕上移除 Window。当 Activity 恢复时,WMS 将 Window 添加回屏幕。 -
什么是窗口层级?
窗口层级是一种组织窗口的结构,其中高层级的窗口可以覆盖低层级的窗口。 -
Activity 窗口通常位于哪个层级?
Activity 窗口通常位于最顶层,以确保用户可以看见 Activity 的内容。
结论
理解 WMS 如何创建 Window 对于深入理解 Android Activity 启动流程至关重要。Window 是 Activity 和屏幕之间的桥梁,它们允许 Activity 的内容在屏幕上呈现并与用户交互。通过了解 Window 创建过程,我们可以更好地理解 Android 系统是如何管理应用程序界面的。