HarmonyOS 鸿蒙Next 跨设备迁移

发布于 1周前 作者 ionicwang 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 跨设备迁移 跨设备迁移(下文简称“迁移”)支持将 Page 在同一用户的不同设备间迁移,以便支持用户无缝切换的诉求。以 Page 从设备 A 迁移到设备 B 为例,迁移动作主要步骤如下:

  • 设备 A 上的 Page 请求迁移。
  • HarmonyOS 处理迁移任务,并回调设备 A 上 Page 的保存数据方法,用于保存迁移必须的数据。
  • HarmonyOS 在设备 B 上启动同一个 Page,并回调其恢复数据方法。开发者可以参考以下详细步骤开发具有迁移功能的 Page。

实现 IAbilityContinuation 接口

  • onStartContinuation()
    Page 请求迁移后,系统首先回调此方法,开发者可以在此回调中决策当前是否可以执行迁移,比如,弹框让用户确认是否开始迁移。
  • onSaveData()
    如果 onStartContinuation() 返回 true ,则系统回调此方法,开发者在此回调中保存必须传递到另外设备上以便恢复 Page 状态的数据。
  • onRestoreData()
    源侧设备上 Page 完成保存数据后,系统在目标侧设备上回调此方法,开发者在此回调中接受用于恢复 Page 状态的数据。注意,在目标侧设备上的 Page 会重新启动其生命周期,无论其启动模式如何配置。且系统回调此方法的时机在 onStart() 之前。
  • onCompleteContinuation()
    目标侧设备上恢复数据一旦完成,系统就会在源侧设备上回调 Page 的此方法,以便通知应用迁移流程已结束。开发者可以在此检查迁移结果是否成功,并在此处理迁移结束的动作,例如,应用可以在迁移完成后终止自身生命周期。
  • onRemoteTerminated()
    如果开发者使用 continueAbilityReversibly() 而不是 continueAbility(),则此后可以在源侧设备上使用 reverseContinueAbility() 进行回迁。这种场景下,相当于同一个 Page(的两个实例)同时在两个设备上运行,迁移完成后,如果目标侧设备上 Page 因任何原因终止,则源侧 Page 通过此回调接收终止通知。

一个应用可能包含多个 Page,仅支持迁移的 Page 需要实现 IAbilityContinuation 接口。同时,此 Page 所包含的所有 AbilitySlice 也需要实现此接口。

请求迁移

实现 IAbilityContinuation 的 Page 可以在其生命周期内,调用 continueAbility()continueAbilityReversibly() 请求迁移。两者的区别是,通过后者发起的迁移此后可以进行回迁。

try {
    continueAbility();
} catch (IllegalStateException e) {
    // Maybe another continuation in progress.
    ...
}

以 Page 从设备 A 迁移到设备B为例,详细的流程如下:

  1. 设备 A 上的 Page 请求迁移。
  2. 系统回调设备 A 上 Page 及其 AbilitySlice 栈中所有 AbilitySlice 实例的 IAbilityContinuation.onStartContinuation() 方法,以确认当前是否可以立即迁移。
  3. 如果可以立即迁移,则系统回调设备 A 上 Page 及其 AbilitySlice 栈中所有 AbilitySlice 实例的 IAbilityContinuation.onSaveData() 方法,以便保存迁移后恢复状态必须的数据。
  4. 如果保存数据成功,则系统在设备 B 上启动同一个 Page ,并恢复 AbilitySlice 栈,然后回调 IAbilityContinuation.onRestoreData() 方法,传递此前保存的数据;此后设备 B 上此 Page 从 onStart() 开始其生命周期回调。
  5. 系统回调设备 A 上 Page 及其 AbilitySlice 栈中所有 AbilitySlice 实例的 IAbilityContinuation.onCompleteContinuation() 方法,通知数据恢复成功与否。

请求回迁

使用 continueAbilityReversibly() 请求迁移并完成后,源侧设备上已迁移的 Page 可以发起回迁,以便使用户活动重新回到此设备。

try {
    reverseContinueAbility();
} catch (IllegalStateException e) {
    // Maybe another continuation in progress.
    ...
}

以 Page 从设备 A 迁移到设备 B 后并请求回迁为例,详细的流程如下:

  1. 设备 A 上的 Page 请求回迁。
  2. 系统回调设备 B 上 Page 及其 AbilitySlice 栈中所有 AbilitySlice 实例的 IAbilityContinuation.onStartContinuation() 方法,以确认当前是否可以立即迁移。
  3. 如果可以立即迁移,则系统回调设备 B 上 Page 及其 AbilitySlice 栈中所有 AbilitySlice 实例的 IAbilityContinuation.onSaveData() 方法,以便保存回迁后恢复状态必须的数据。
  4. 如果保存数据成功,则系统在设备 A 上 Page 恢复 AbilitySlice 栈,然后回调 IAbilityContinuation.onRestoreData() 方法,传递此前保存的数据。
  5. 如果数据恢复成功,则系统终止设备 B 上 Page 的生命周期。

更多关于HarmonyOS 鸿蒙Next 跨设备迁移的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next 跨设备迁移的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对帖子标题“HarmonyOS 鸿蒙Next 跨设备迁移”的问题,以下是专业且简洁的回答:

HarmonyOS 鸿蒙Next的跨设备迁移功能,是鸿蒙系统的一大亮点。该功能允许用户在不同设备间无缝迁移数据和应用,提升用户的使用体验。

在鸿蒙系统中,跨设备迁移的实现依赖于分布式技术。系统能够识别并连接同一账号下的不同设备,通过高速的数据传输通道,实现数据的实时同步和应用的无缝切换。用户只需在源设备上选择需要迁移的内容,然后在目标设备上确认接收,即可完成迁移过程。

值得注意的是,跨设备迁移功能需要设备间保持网络连接,并且确保账号信息一致。此外,不同设备间的系统版本和硬件配置也可能影响迁移的效率和兼容性。因此,在进行跨设备迁移时,建议用户确保设备处于良好的网络环境中,并检查设备的系统版本和兼容性。

如果用户在迁移过程中遇到任何问题,如数据丢失、迁移失败等,可以尝试重新连接设备、检查网络状态或更新系统版本等方法进行解决。若问题依旧无法解决,请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。客服人员将为您提供专业的技术支持和解决方案。

回到顶部