Window和DecorView是什么?DecorView又是如何和Window建立联系的?

在 Android 的视图系统中,WindowDecorView 是两个核心概念,它们在管理和展示应用界面中起着至关重要的作用。

Window

在 Android 中,Window 是一个抽象概念,它代表一个窗口实体,可以包含视图和视图组。它不是一个视图或视图容器,而是管理视图的一个框架层面的对象,负责事件分发、焦点控制、以及与系统窗口的通信。每个 Android 应用至少有一个窗口,即主窗口,但可以包含多个窗口(例如对话框、下拉列表等)。

DecorView

DecorView 是窗口的根视图,它是 ViewGroup 的一个实现,包含应用内容的整个视图层次结构。它包括标题栏(如果有的话)和应用内容视图。DecorView 本质上是整个 Android 窗口视图层次的容器。

DecorView 和 Window 的联系

DecorView 是通过 Window 类与窗口建立联系的。当一个应用的 Activity 启动时,系统会为它创建一个 Window 实例,通常是 PhoneWindow 类的实例。这个过程涉及以下几个步骤:

  1. 创建 Window
    • 当 Activity 启动时,会通过 Activity.attach() 方法关联一个 Window(通常是 PhoneWindow)。这个方法会为 Activity 设置布局参数、窗口管理器等。
  2. 设置 Content View
    • Activity 的内容设置是通过调用 Activity.setContentView() 实现的。这个方法实际上是调用了 WindowsetContentView() 方法。
  3. 生成 DecorView
    • Window.setContentView() 方法内部,Window 首先检查是否已经创建了 DecorView。如果没有,它会创建一个 DecorView 并将其设置为窗口的根视图。
    • 然后,Window 将通过 WindowManagerDecorView 添加到系统窗口中。
  4. 视图渲染
    • DecorView 渲染其包含的视图层次结构(包括应用指定的内容视图和可能的窗口装饰,如标题栏)。
    • 用户交互和绘制都是通过 DecorView 进行协调和处理的。

通过这种方式,DecorView 作为一个桥梁将 Window 的抽象功能与实际的视图层次结构相连接,允许 Window 管理视图,同时将事件分发、视图绘制等工作委托给 DecorView。因此,DecorView 是连接 Android 布局管理和系统窗口管理之间的关键环节。

发表评论

后才能评论