1-9.【Stage 模型】Stage 模型如何支持分布式流转?流转过程中生命周期如何变化?UI 状态如何序列化?如果目标设备没有该 Ability会发生什么?

4 阅读3分钟

1️⃣ Stage 模型如何支持分布式流转?

分布式流转(Ability Continuation / 分布式 Ability)是 Stage 模型的核心特性之一:

  • 核心思想:Ability + WindowStage + 页面栈状态 可以从源设备迁移到目标设备,用户体验连续。
  • 流转过程:
设备 A (源)
 └─ UIAbility + WindowStage + Page栈
       |
       | Ability Continuation 请求
       v
设备 B (目标)
 └─ UIAbility 实例化 → WindowStage 创建 → 页面栈恢复
  • 迁移粒度

    1. Ability 级别:迁移整个 UIAbility 的实例
    2. WindowStage 级别:只迁移指定窗口和页面栈
    3. Page 级别:栈顶页面状态序列化并恢复
  • 支持 多设备协同:折叠屏、平板、手机、可穿戴设备均可无缝继续操作。


2️⃣ 流转过程中生命周期如何变化?

源设备(Device A):

阶段生命周期回调说明
请求流转onBackground()UIAbility 转入后台,WindowStage 暂停渲染,但实例存在
页面栈序列化自定义序列化逻辑页面状态和 UI 数据被序列化传输

目标设备(Device B):

阶段生命周期回调说明
创建 AbilityonCreate()系统创建新的 UIAbility 实例
创建 WindowStageonWindowStageCreate()创建窗口容器,并准备页面栈
恢复 UIrestorePageStack()序列化的页面栈状态反序列化到新 WindowStage
前台显示onForeground()用户可继续操作,感觉无缝迁移

✅ 核心特点:

  • WindowStage 生命周期独立,支持只迁移特定窗口
  • Ability 生命周期在源设备保持或后台挂起,目标设备创建新的实例
  • 页面栈和 UI 状态通过序列化/反序列化完成迁移

3️⃣ UI 状态如何序列化?

  1. 页面状态数据

    • 页面内部的 组件状态、表单数据、滚动位置
    • 通过 onSaveData() 或自定义方法序列化为 JSON / Parcel / ArkTS 可序列化对象
  2. 页面栈序列化

    • 保存 页面顺序、栈顶索引
    • 每个页面的状态单独序列化
  3. 恢复 UI

    • 在目标设备调用 restorePageStack()
    • 逐页创建 Page 并注入状态,实现视觉和功能无缝恢复

💡 注意事项:

  • 序列化必须保证 轻量化,避免大量对象跨设备传输导致卡顿
  • 对大数据、图片、Media 资源,建议 缓存到共享存储 或异步加载

4️⃣ 如果目标设备没有该 Ability 会发生什么?

  1. 系统行为
  • Ability 未安装 / HAP 不存在
  • 分布式流转请求失败 → 回调通知源设备流转失败
  1. 工程实践
  • 可以 自动下载安装 Feature HAP(前提是开启了动态下载机制)
  • 或者提示用户在目标设备安装必要模块
  • Ability Continuation 框架会保证源设备 Ability 继续保留状态,避免丢失用户操作
  1. 核心原则
  • 分布式迁移是 尝试在目标设备复现源 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 时,保证源设备状态安全