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

HarmonyOS“跨设备迁移”原理解析

时间:2023-03-13 15:01:47 科技观察

了解更多请访问:HarmonyOS技术社区https://harmonyos.51cto.com什么是HarmonyOS“跨设备迁移”?HarmonyOS“跨设备迁移”是指承载业务的页面在同一用户的不同设备之间进行迁移,以支持用户业务的无缝切换。“跨设备迁移”实现了业务跨设备的功能打破单一设备业务受限的壁垒典型应用场景示例:图1设备A写完一封邮件,选择附件,转发到另一台设备图2设备B弹出邮件HarmonyOS“跨设备迁移”技术原理HarmonyOS“跨设备迁移”需要一个关键技术——“分布式任务调度”,分布式任务调度的“跨设备迁移”依赖HarmonyOS系统分布式任务调度的“服务迁移能力”图3分布式任务调度的定位“分布式任务调度”基于四大技术基于分布式软总线、分布式数据管理、分布式配置文件和分布式安全认证等特性构建统一的分布式服务管理(发现、同步、注册、调用)机制,支持远程启动、远程调用、远程连接、迁移等操作跨设备应用程序。图4分布式任务调度●分布式软总线实现了近场设备间统一的分布式通信能力管理,提供了不区分链路的设备发现、连接、组网和传输能力。开发者可以专注于业务逻辑功能的实现,而无需关注设备间的组网方式和底层协议。●分布式数据管理中的数据同步能力,可实现网络中共享的设备信息实时同步,如设备注销下线、设备信息列表等,方便多设备信息的实时同步.●分布式配置文件实现了多设备配置文件的统一查询和订阅能力,方便了多设备间的管理。●分布式安全认证提供应用完整性保护、应用权限管理、设备认证、密钥管理等服务,为业务提供安全基础。分布式任务调度就是基于以上技术特点,构建统一的分布式服务管理机制,完成分布式网络中设备中系统服务信息的同步和管理,包括服务注册、服务发现、服务同步和服务调度。当业务发起“跨设备迁移”请求时,分布式调度系统根据调度决策机制选择目标设备,并获取对应设备的系统服务信息。系统服务调度成功后,发起远程启动、远程调用、远程连接和远程迁移,相应设备的分布式任务调度系统完成本地化任务执行。HarmonyOS“跨设备迁移”的具体实现过程HarmonyOS“跨设备迁移”是靠“能力”来实现的,这里简单介绍一下“能力”。AbilityAbility是应用程序功能的抽象。HarmonyOS支持以Ability为单位部署应用。业务“跨设备迁移”的基本粒度也是Ability,具体实现是在不同设备间的同一个应用中同名Ability之间进行迁移。●能力概览https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-ability-overview-0000000000029852HarmonyOS应用由一个或多个FA(FeatureAbility)或PA(ParticleAbility)组成。图5能力分类●FA具有UI界面,提供与用户交互的能力。FA仅支持PageAbility。一个Page实例可以包含一组相关的页面,每个页面由一个AbilitySlice实例表示。图6页面构成●PageAbility的基本概念https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-page-concept-0000000000033573●PA没有UI界面,提供运行任务的能力在后台统一数据访问抽象PA支持ServiceAbility和DataAbility:ServiceAbility:用于提供在后台运行任务的能力。数据能力:用于对外提供统一的数据访问抽象。Ability的生命周期主要用于Page实例的状态机管理。系统管理或用户操作等行为都会导致Page实例在其生命周期中的不同状态之间进行转换。AbilityClass提供的回调机制使得Page能够及时感知外界变化,从而正确响应状态变化。●PageAbilityLifecyclehttps://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-page-lifecycle-0000000000029840“跨设备迁移”的处理依赖Ability的生命周期管理完成Page状态切换,而Page在生命周期回调中处理数据的保存和恢复。具体流程如下图所示:图7Ability生命周期流程●onStart()在系统第一次创建Page实例时触发。应用程序必须重写此方法并初始化此处的配置以显示AbilitySlice。然后页面进入INACTIVE状态,用户无法进行交互。?onActive()在页面从INACTIVE状态切换到前台时触发。之后页面进入ACTIVE状态,在该状态下,应用与用户处于交互状态。?onInactive()会在Page即将进入非交互状态时触发,之后Page会进入INACTIVE状态,应用程序和用户无法进行交互。?当页面不再对用户可见时触发onBackground()。页面在此之后进入后台状态。?onForeground()当Page从Background状态返回到前台时被触发。此后页面返回到INACTIVE状态。?onStop()在系统即将销毁页面时触发。迁移过程围绕着Ability的生命周期展开,我们来看看业务“跨设备迁移”的具体过程。业务“跨设备迁移”的本质是通过分布式组网将一台设备的“能力运行状态”迁移到另一台设备上。程序中的“跨设备迁移”通过调用PageAbility的迁移接口ContinueAbility,将设备A的业务无缝迁移到指定的设备B。其中,支持迁移的Page以及该Page包含的所有AbilitySlices都必须实现IAbilityContinuation接口。具体接口代码如下:publicinterfaceIAbilityContinuation{//是否可以迁移?booleanonStartContinuation();//保存数据booleanonSaveData(IntentParamsvar1);//恢复数据booleanonRestoreData(IntentParamsvar1);//迁移完成voidonCompleteContinuation(intvar1);defaultvoidonRemoteTerminated(){thrownewRuntimeException("Stub!");}}图8业务“交叉”“跨设备迁移”流程“跨设备迁移”关键步骤:“跨设备迁移”数据流转过程:HarmonyOS“跨设备迁移”实战实例我们为您带来办公场景“基于分布式的协同邮件编辑”demo,作为“跨设备迁移”应用的开发实例。此示例通过模拟不同设备之间的协作电子邮件内容编辑来演示“内容”的跨设备迁移。目前该demo已上线HarmonyOS官网Codelabs。感兴趣的同学可以参考其具体流程开发一个“跨设备迁移”邮箱demo。●Codelabs链接https://developer.huawei.com/consumer/cn/codelabsPortal/carddetails/Distributed-Mail通过这一系列的分析,开发者是否对HarmonyOS“跨设备迁移”技术有了更深入的了解,未来,我们将为大家带来鸿蒙相关技术的更多解读。更多信息请访问:Harmonyos.51cto.com,与华为官方合作打造的鸿蒙技术社区