首页 > 其他分享 >鸿蒙OS 跨设备迁移

鸿蒙OS 跨设备迁移

时间:2024-01-29 22:03:53浏览次数:19  
标签:鸿蒙 IAbilityContinuation AbilitySlice 迁移 回调 OS Page 设备

跨设备迁移(下文简称“迁移”)支持将 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() 开始其生命周期回调。 6.系统回调设备 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 的生命周期。

标签:鸿蒙,IAbilityContinuation,AbilitySlice,迁移,回调,OS,Page,设备
From: https://blog.51cto.com/u_16536309/9472718

相关文章

  • 如何看待开发者是否需要入坑鸿蒙?
    前言自打华为2019年发布鸿蒙操作系统以来,网上各种声音百家争鸣。尤其是2023年发布会公布的鸿蒙4.0宣称不再支持Android,更激烈的讨论随之而来。通过本文,我将给大家介绍以下几点,让大家清楚的了解到鸿蒙开发的趋势:1.HarmonyOS与OpenHarmony区别2.移动开发现状3.鸿蒙开发优劣势......
  • OSPF特殊区域(stub与totally stub)
     作者:兔砸网工-阿毛1.stub与totallystub概述         随着网络规模逐渐变大,OSPF的LSDB规模也变大,因此带来更高的设备性能要求,从而导致一些旧设备或者性能较低的设备运行卡顿,造成网络卡顿。为了优化OSPF的算法,减少低性能设备中LSA的数量以及减少路由条目,从而降低低性能的......
  • PostgreSQL 格式化日志输出
    PostgreSQLstderr日志记录,修改postgresql.cfg中的log_line_prefix:log_line_prefix='%m[pid=%p]%q[txid=%x]%u@%d'--输出结果如下2024-06-2017:17:52.988CEST[pid=19718][txid=0]dbausers@testLOG:statement:INSERTINTOchildVALUES(100,1,'newch......
  • Django - admin 表单编辑页面,增加自定义功能,前端上传视频到oss
    #背景:可以在admin编辑页面原有基础上,增加一些可定制的功能,如:在本地上传图片到oss,减少服务器的带宽压力,下面就以此为例。示例图:  一。models.py#video可以直接用字符串存储,因为最终里面只有有一串oss的视频路径classNews(models.Model):OSS_URL='https://xxxx......
  • Apipost中API如何调用本地文件
    近期版本更新中Apipost推出插件管理,可以直接在预、后执行脚本中调用本地的脚本文件导入脚本在「系统设置」—「插件管理」中打开目录将要执行的脚本文件拖入到文件夹下 执行脚本需要获取请求参数:constrequestData=request.request_bodys;在预、后执行脚本输入框中输入......
  • 【教程】iOS如何抓取HTTP和HTTPS数据包经验分享
    ......
  • MySQL迁移人大金仓kingbase
    前言:前段时间接到一个任务,说是数据库要由mysql改成人大金仓,项目代码也需要修改适配(另一个同事负责),而我则是负责数据库的迁移工作,期限是七天(2024-01-26已上线),在这之前我甚至都没听过人大金仓这个名词,而且也没有相关文档的交接更没有技术人员支撑,起初我还让项目负责人去跟集团的DBA......
  • MSE Nacos 配置变更审计平台使用指南
    作者:孙立(涌月)、邢学超(于怀)、李艳林(彦林)配置审计平台简介Nacos[1]作为一款业界主流的微服务注册中心和配置中心,管理着企业核心的配置资产,由于配置变更的安全和稳定诉求越来越高,因此我们提供了安全和可追溯性保障机制。配置变更的途径主要包括控制台手动发布和使用NacosSDK客户......
  • 鸿蒙OS 剪贴板开发指导
    场景介绍同一设备的应用程序A、B之间可以借助系统剪贴板服务完成简单数据的传递,即应用程序A向剪贴板服务写入数据后,应用程序B可以从中读取出数据。在满足分布式剪贴板服务的使用条件时,应用程序A、B也可以来自组网内的不同设备。图1剪贴板服务示意图在使用剪贴板服务时,需......
  • 【iOS ARKit】光照估计
    光照估计    AR与VR在光照上最大的不同在于VR世界是纯数字世界,有一套完整的数学模型,而AR则是将计算机生成的虚拟物体或关于真实物体的非几何信息叠加到真实世界的场景之上实现对真实世界的增强,融合了真实世界与数字世界。就光照而言,VR中的光照完全由开发人员决定,光照效......