1️⃣ Stage 模型如何支持分布式流转?
分布式流转(Ability Continuation / 分布式 Ability)是 Stage 模型的核心特性之一:
- 核心思想:Ability + WindowStage + 页面栈状态 可以从源设备迁移到目标设备,用户体验连续。
- 流转过程:
设备 A (源)
└─ UIAbility + WindowStage + Page栈
|
| Ability Continuation 请求
v
设备 B (目标)
└─ UIAbility 实例化 → WindowStage 创建 → 页面栈恢复
-
迁移粒度:
- Ability 级别:迁移整个 UIAbility 的实例
- WindowStage 级别:只迁移指定窗口和页面栈
- Page 级别:栈顶页面状态序列化并恢复
-
支持 多设备协同:折叠屏、平板、手机、可穿戴设备均可无缝继续操作。
2️⃣ 流转过程中生命周期如何变化?
源设备(Device A):
| 阶段 | 生命周期回调 | 说明 |
|---|---|---|
| 请求流转 | onBackground() | UIAbility 转入后台,WindowStage 暂停渲染,但实例存在 |
| 页面栈序列化 | 自定义序列化逻辑 | 页面状态和 UI 数据被序列化传输 |
目标设备(Device B):
| 阶段 | 生命周期回调 | 说明 |
|---|---|---|
| 创建 Ability | onCreate() | 系统创建新的 UIAbility 实例 |
| 创建 WindowStage | onWindowStageCreate() | 创建窗口容器,并准备页面栈 |
| 恢复 UI | restorePageStack() | 序列化的页面栈状态反序列化到新 WindowStage |
| 前台显示 | onForeground() | 用户可继续操作,感觉无缝迁移 |
✅ 核心特点:
- WindowStage 生命周期独立,支持只迁移特定窗口
- Ability 生命周期在源设备保持或后台挂起,目标设备创建新的实例
- 页面栈和 UI 状态通过序列化/反序列化完成迁移
3️⃣ UI 状态如何序列化?
-
页面状态数据:
- 页面内部的 组件状态、表单数据、滚动位置等
- 通过
onSaveData()或自定义方法序列化为 JSON / Parcel / ArkTS 可序列化对象
-
页面栈序列化:
- 保存 页面顺序、栈顶索引
- 每个页面的状态单独序列化
-
恢复 UI:
- 在目标设备调用
restorePageStack() - 逐页创建 Page 并注入状态,实现视觉和功能无缝恢复
- 在目标设备调用
💡 注意事项:
- 序列化必须保证 轻量化,避免大量对象跨设备传输导致卡顿
- 对大数据、图片、Media 资源,建议 缓存到共享存储 或异步加载
4️⃣ 如果目标设备没有该 Ability 会发生什么?
- 系统行为:
- Ability 未安装 / HAP 不存在
- 分布式流转请求失败 → 回调通知源设备流转失败
- 工程实践:
- 可以 自动下载安装 Feature HAP(前提是开启了动态下载机制)
- 或者提示用户在目标设备安装必要模块
- Ability Continuation 框架会保证源设备 Ability 继续保留状态,避免丢失用户操作
- 核心原则:
- 分布式迁移是 尝试在目标设备复现源 UIAbility + WindowStage + 页面栈
- 如果失败,源设备保持 Ability 状态,用户可继续操作或重试迁移
5️⃣ 总结
| 问题 | 核心答案 |
|---|---|
| Stage 模型如何支持分布式流转 | Ability + WindowStage + 页面栈状态可序列化,通过系统 Ability Continuation 在目标设备恢复 |
| 流转过程中生命周期 | 源设备:onBackground + 序列化页面状态;目标设备:onCreate → onWindowStageCreate → restorePageStack → onForeground |
| UI 状态序列化 | 页面组件状态 + 页面栈顺序 → JSON / Parcel / ArkTS 可序列化对象 → 反序列化恢复 |
| 目标设备没有该 Ability | 流转失败,系统通知,源设备 Ability 保留;可动态下载安装 HAP 或提示用户 |
💡 核心理解:
- Stage 模型的分布式流转 = Ability 解耦 + WindowStage 解耦 + 页面栈序列化 + 系统桥接
- UIAbility 生命周期和 WindowStage 生命周期在迁移中独立管理
- 数据状态通过序列化实现跨设备迁移
- 目标设备缺失 Ability 时,保证源设备状态安全