1-4.【Stage 模型】WindowStage 的作用是什么?为什么 Stage 模型要引入它?

3 阅读3分钟

WindowStage 的作用是什么?为什么 Stage 模型要引入它?多设备流转时 WindowStage 如何变化?WindowStage 是进程级还是 Ability 级?

1️⃣ WindowStage 的作用

HarmonyOS Stage 模型中,WindowStage 是窗口级 UI 容器,承担以下作用:

  1. 页面栈管理

    • 每个 WindowStage 拥有独立的 页面栈(Page Stack)
    • 栈顶 Page 显示在屏幕上,其他页面在栈中等待。
  2. UI 渲染承载

    • 承载页面的渲染树(Component Tree / UI 控件)。
    • 窗口级资源(布局、动画、事件监听)都在 WindowStage 里管理。
  3. 生命周期解耦

    • 生命周期独立于 UIAbility。
    • Ability 可以存在多个 WindowStage,每个窗口可以独立创建、销毁或迁移。
  4. 多窗口与多任务支持

    • 支持分屏、浮层、桌面小窗等复杂 UI 场景。
    • 窗口之间互不干扰,资源管理更灵活。

✅ 核心总结:WindowStage = 窗口级 UI 容器 + 独立页面栈 + 生命周期解耦单元。


2️⃣ 为什么 Stage 模型要引入 WindowStage?

Stage 模型相比传统 FA 模型的优化:

传统 FA 模型Stage 模型 + WindowStage改进点
页面与 Ability 强绑定页面栈在 WindowStage 内独立页面生命周期解耦,切换页面不影响 Ability
单窗口承载多 WindowStage 支持支持多窗口、多任务、多屏场景
跨设备协作困难WindowStage 状态可序列化迁移Ability Continuation 时只迁移窗口状态即可
生命周期耦合WindowStage 生命周期独立页面销毁、窗口销毁不会直接销毁 Ability

✅ 核心目的:解耦 UI 与能力、支持多窗口、多设备协作、优化资源管理


3️⃣ 多设备流转时 WindowStage 的变化

当 **Ability Continuation(跨设备迁移)**发生时:

  1. WindowStage 序列化

    • WindowStage 的页面栈、UI状态、绑定数据被序列化。
  2. 在目标设备上重建 WindowStage

    • 迁移到另一设备时,Ability 实例可以复用,但每个 WindowStage 会在目标设备创建新的实例。
    • 页面栈保持原有顺序和状态。
  3. 迁移粒度

    • Ability 本身不需要全部重建,只迁移需要的窗口和页面栈。
    • 支持同时迁移部分窗口,而其他窗口保持在原设备。

4️⃣ WindowStage 是进程级还是 Ability 级?

  • WindowStage 是 Ability 级的

    • 它属于某个 UIAbility 的实例。
    • 生命周期和 Ability 绑定,但可以独立创建/销毁。
  • 不是独立进程级

    • 一个 UIAbility 的所有 WindowStage 运行在同一个进程中。
    • 多设备迁移时,WindowStage 实例会在目标设备的新进程中创建,但仍属于 Ability 级。

✅ 核心理解:WindowStage 是能力级别的窗口单元,不是进程级的独立实体,但可以跨设备迁移复现。


🔹 总结

  1. 作用:窗口级 UI 容器 + 独立页面栈 + 生命周期解耦
  2. 引入原因:解决页面与 Ability 强耦合、支持多窗口、多屏、多设备协作
  3. 多设备流转变化:WindowStage 序列化 → 目标设备重建 → 页面栈和 UI 状态保持
  4. 粒度:Ability 级,而非进程级