Android 窗口显示(一)—— Activity、Window 和 View 之间的联系

577 阅读2分钟

点击阅读:Android 窗口显示系列文章

1. 核心组件解析

1.1 Activity

Activity 可简单理解为应用程序中的一个“屏幕”或“页面”,是用户与应用进行交互的容器,应用逻辑的载体

Activity 不直接处理 UI 绘制,而是通过生命周期回调管理业务逻辑,还作为上下文环境提供资源访问。

当系统创建 Activity 时,会同步触发 Window 的创建流程。

1.2 Window

Window 是抽象类,是应用视图(View)与系统窗口管理器(WindowManager)之间的配置接口与策略桥梁,其唯一实现是 PhoneWindow

核心职责包括:

  • 提供 UI 容器:创建并管理顶层视图 DecorView,承载应用内容。
  • 控制窗口属性:管理背景、标题栏、以及传递给 WMS 的布局参数(LayoutParams)。
  • 参与事件分发:作为 ViewRootImplActivity 之间的输入事件中转站(通过 Window.Callback)。

1.3 View

View 是 UI 层的基础构件,可视化的原子单元。

作为所有UI组件的基类,View承担着:

  • 测量布局:onMeasure()确定自身大小
  • 位置计算:onLayout()确定子元素位置
  • 界面绘制:onDraw()实现视觉呈现
  • 事件响应:onTouchEvent()处理用户交互

2. 三者的协同关系

image.png

2.1 Activity 与 Window

每个 Activity 都包含一个 Window 对象,二者为共生关系,即每个 Activity 持有唯一的 PhoneWindow 实例。二者生命周期同步。

Activity 通过操作 Window 来间接控制视图的添加、显示和交互,如 Activity 通过 setContentView() 委托 Window 处理。

2.2 Window 与 View

Window 是一个容器,用于承载视图(View),二者是容器与内容关系。View 通过 Window 被加载到屏幕上,并接受用户的输入事件。Window 还负责处理视图之间的交互和事件传递。

setContentView 首次调用时,会创建 DecorView,解析 XML 布局并将其挂载到 DecorView 的 ContentView 区域。

2.3 Activity 与 View

虽然 Activity 不直接负责视图的绘制和显示,但它通过调用 Window 的方法来间接控制视图的添加、显示和交互。例如,在 Activity 中调用 setContentView 方法实际上是在调用 Window 的setContentView 方法,将视图添加到 Window 上。

2.4 三者关系

Activity、Window 和 View 的协作体现了 Android 系统分层解耦的设计哲学:

  • Activity:用户交互的起点,业务逻辑的容器
  • Window:系统与应用的桥梁,视图管理的策略层
  • View:视觉呈现的基础,事件响应的终点

Activity、Window 和 View 三者形成了 Android UI 系统的黄金三角关系,其对应关系可概括为:

  • Activity (控制层)管生命周期。持有 Window,负责业务逻辑与流程控制。
  • Window (容器层)管窗口策略。是 View 的直接管理者(持有 DecorView),配置窗口属性(背景/标题)。
  • View (显示层)管绘制交互。是实际的像素渲染者,处理具体的 Measure/Layout/Draw。