当前位置: 首页 > 科技观察

基于PA的跨设备迁移功能及PageAbility代码示例工程完全解

时间:2023-03-20 20:01:57 科技观察

基于PA的跨设备迁移功能完整解决方案及PageAbility代码示例工程简介:是Ability框架下基于PageAbility的能力迁移动作。主要步骤:源端页面请求迁移。源设备回调保存数据的方法。目标设备启动Page,回调数据恢复方法请求迁移。continueAbility()continueAbilityReversibly()方法的区别在于:continueAbility()不能被调用,而continueAbilityReversibly()可以调用实现IAbilityContinuation接口onStartContinuation()onSaveData()onRestoreData()onCompleteContinuation()onFailedContinuation()onRemoteTerminated()文字描述不够清晰直接,所以以表格的形式输出。A作为源端迁移到目标端B,回调方法顺序为:2.PageAbility代码示例工程本示例演示了同一个PageAbility内部和不同Page之间的AbilitySlice导航,以及PageAbility的跨终端迁移。(1)项目演示因为示例代码的字实在是太小了,有点眼花,所以我稍微调整一下,在跨设备迁移和PA的不同页面之间导航(2)项目目录和它的Slice的直接关系(3)统一PA导航和不同Pages中的AbilitySlice实例存储在栈中,页面中导航的数据传输通过intent传递。源页面调用setParam()方法,其值为键值对。通过跳转页面上的getParam(intent.getParam(key:"XX"))接收目标页面向源页面传递数据,构造一个intent实例(返回数据的载体)-赋值给resultIntent变量intent类型-调用方法setParam()(以键值对的形式)-调用方法setResult()将实例指定为参数-在原始页面调用PresentForResult()(请求代码为非-负整数作为第三个参数标识某个页面导航)-重写方法onResult(处理返回数据)-不同页面显式:在触发事件中构造一个Intent.OperationBuilder实例-分别链调用Operationoperation=newIntent.OperationBuilder()withBundleName(getBundleName()).getAbilityName(目标Ability.class.getName()).build();为了在需要传递的Intent类型的实例导航中封装目标Page的包名和类名,需要调用导航方法setOperation,并将新建的Intent类型实例操作指定为其参数。最后使用带有导航的startAbility作为参数。要从目标页面跳转到源页面并处理数据,需要在目标上调用getAbility.setParam并设置响应码(用于标识响应)。然后在原页面上将startAbility改为startAbilityForResult(responsecode)——将回调方法onResult替换为onAbilityResult(responsecode),(4)跨设备迁移设备A上的Page请求迁移。系统回调Page中所有AbilitySlice实例的IAbilityContinuation.onStartContinuation()方法及其在设备A上的AbilitySlice栈,确认是否可以立即进行迁移。如果可以立即迁移,系统会回调设备A上Page的IAbilityContinuation.onSaveData()方法及其AbilitySlice栈中的所有AbilitySlice实例,以保存迁移后恢复状态所需的数据。如果数据保存成功,则系统在设备B上启动同一个Page,恢复AbilitySlice栈,然后回调IAbilityContinuation.onRestoreData()方法传递之前保存的数据;之后,设备B上的页面从onStart()回调开始其生命周期。系统回调设备A上Page的IAbilityContinuation.onCompleteContinuation()方法和AbilitySlice栈中的所有AbilitySlice实例,通知数据恢复是否成功。如果迁移过程中出现异常,系统会回调设备A上Page的IAbilityContinuation.onFailedContinuation()方法及其AbilitySlice栈中的所有AbilitySlice实例,通知迁移过程中发生了异常。并不是所有的异常都会回调FA的这个方法,仅限于这个接口。枚举异常。总结跨设备迁移基于分布式传输操作。非常有趣,值得研究。同一个Page,不同的Page,不同的设备。三种情况下,Page的生命周期都需要了解一下。跨设备迁移需要区分Page生命周期回调方法和实现IAbilityContinuation接口的回调方法。一定要注意源端和目标端的方法调用顺序。Ability与Slice的基本关系、Slice与Layout(xml)的关系、Intent的理解有所提升。更多信息请访问:Harmonyos.51cto.com,与华为官方合作打造的鸿蒙技术社区