WindowStage 的作用是什么?为什么 Stage 模型要引入它?多设备流转时 WindowStage 如何变化?WindowStage 是进程级还是 Ability 级?
1️⃣ WindowStage 的作用
在 HarmonyOS Stage 模型中,WindowStage 是窗口级 UI 容器,承担以下作用:
-
页面栈管理
- 每个 WindowStage 拥有独立的 页面栈(Page Stack) 。
- 栈顶 Page 显示在屏幕上,其他页面在栈中等待。
-
UI 渲染承载
- 承载页面的渲染树(Component Tree / UI 控件)。
- 窗口级资源(布局、动画、事件监听)都在 WindowStage 里管理。
-
生命周期解耦
- 生命周期独立于 UIAbility。
- Ability 可以存在多个 WindowStage,每个窗口可以独立创建、销毁或迁移。
-
多窗口与多任务支持
- 支持分屏、浮层、桌面小窗等复杂 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(跨设备迁移)**发生时:
-
WindowStage 序列化
- WindowStage 的页面栈、UI状态、绑定数据被序列化。
-
在目标设备上重建 WindowStage
- 迁移到另一设备时,Ability 实例可以复用,但每个 WindowStage 会在目标设备创建新的实例。
- 页面栈保持原有顺序和状态。
-
迁移粒度
- Ability 本身不需要全部重建,只迁移需要的窗口和页面栈。
- 支持同时迁移部分窗口,而其他窗口保持在原设备。
4️⃣ WindowStage 是进程级还是 Ability 级?
-
WindowStage 是 Ability 级的:
- 它属于某个 UIAbility 的实例。
- 生命周期和 Ability 绑定,但可以独立创建/销毁。
-
不是独立进程级:
- 一个 UIAbility 的所有 WindowStage 运行在同一个进程中。
- 多设备迁移时,WindowStage 实例会在目标设备的新进程中创建,但仍属于 Ability 级。
✅ 核心理解:WindowStage 是能力级别的窗口单元,不是进程级的独立实体,但可以跨设备迁移复现。
🔹 总结
- 作用:窗口级 UI 容器 + 独立页面栈 + 生命周期解耦
- 引入原因:解决页面与 Ability 强耦合、支持多窗口、多屏、多设备协作
- 多设备流转变化:WindowStage 序列化 → 目标设备重建 → 页面栈和 UI 状态保持
- 粒度:Ability 级,而非进程级