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

系统 OpenHarmony
文章由鸿蒙社区产出,想要了解更多内容请前往:51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com

[[405943]]

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

什么是HarmonyOS“跨设备迁移”?

HarmonyOS“跨设备迁移”是指将承载业务的Page在同一用户的不同设备间迁移,以便支持用户业务无缝切换的诉求。“跨设备迁移”实现了业务跨设备流转功能,打破业务受限单设备的壁垒。

典型应用场景举例:

图1 设备A完成邮件编写并选择附件,流转到另一设备

图2 设备B弹出邮件界面,可继续完成邮件编写

HarmonyOS“跨设备迁移”的技术原理

HarmonyOS“跨设备迁移”需要用到一项关键技术——“分布式任务调度”。

分布式任务调度

“跨设备迁移”依赖HarmonyOS系统中分布式任务调度的“业务迁移能力”。

图3 分布式任务调度所处位置

“分布式任务调度”基于分布式软总线、分布式数据管理、分布式Profile和分布式安全认证这四项技术特性,构建统一的分布式服务管理(发现、同步、注册、调用)机制,支持对跨设备的应用进行远程启动、远程调用、远程连接以及迁移等操作。

图4 分布式任务调度

● 分布式软总线实现了近场设备间统一的分布式通信能力管理,提供不区分链路的设备发现、连接、组网和传输能力。开发者可无需关注设备间组网方式与底层协议,集中精力实现业务逻辑功能。

● 分布式数据管理中的数据同步能力可实现组网内的设备信息共享实时同步,如设备上下线、设备信息列表等,方便多设备信息实时同步。

● 分布式Profile实现多设备Profile的统一查询、订阅能力,拉通多设备之间的管理。

● 分布式安全认证提供应用完整性保护、应用权限管理、设备认证、密钥管理等服务,为业务提供安全保障基础。

分布式任务调度基于以上技术特性基座,构建统一的分布式服务管理机制,完成了分布式组网内设备中的系统服务信息同步及管理,包括服务注册、服务发现、服务同步和服务调度。

在业务发起“跨设备迁移”请求时,分布式调度系统根据调度决策机制选择目标设备,并获取对应设备的系统服务信息,在系统服务成功调度后,向目标设备发起远程启动、远程调用、远程连接和远程迁移,由对应设备的分布式任务调度系统完成本地化的任务执行。

HarmonyOS“跨设备迁移”的具体实现流程

HarmonyOS“跨设备迁移”依赖“Ability”实现,这里我们简单介绍一下“Ability”。

Ability

Ability是应用所具备能力的抽象,HarmonyOS支持应用以Ability为单位进行部署。业务“跨设备迁移”的基础粒度也是Ability,具体实现是在不同设备间同一应用的同名Ability之间进行迁移。

● Ability概述

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-ability-overview-0000000000029852

HarmonyOS的应用由一个或多个FA(Feature Ability)或PA(Particle Ability)组成。

图5 Ability分类

● FA有UI界面,提供与用户交互的能力

FA仅支持Page Ability,一个Page实例可以包含一组相关页面,每个页面用一个AbilitySlice实例表示。

图6 Page组成

● Page Ability基本概念

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-page-concept-0000000000033573

● PA无UI界面,提供后台运行任务的能力以及统一的数据访问抽象

PA支持Service Ability和Data Ability:

Service Ability:用于提供后台运行任务的能力。

Data Ability:用于对外部提供统一的数据访问抽象。

Ability的生命周期主要用于Page实例的状态机管理,系统管理或用户操作等行为均会引起Page实例在其生命周期的不同状态之间进行转换。Ability Class提供的回调机制能够让Page及时感知外界变化,从而正确地应对状态变化。

● Page Ability生命周期

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-page-lifecycle-0000000000029840

“跨设备迁移”的处理依赖Ability的生命周期管理来完成Page的状态切换,同时Page在生命周期回调中处理数据的保存与恢复。具体流程如下图所示:

图7 Ability生命周期流程

● onStart()

当系统首次创建Page实例时触发。应用须重写该方法,并在此初始化配置为展示AbilitySlice。Page在此后进入INACTIVE状态,用户不可交互。

• onActive()

当Page从INACTIVE状态切换到前台时触发。Page在此之后进入ACTIVE状态,该状态下,应用与用户处于可交互的状态。

• onInactive()

当Page即将进入不可交互状态时会被触发,Page在此之后进入INACTIVE状态,应用与用户不可交互。

• onBackground()

当Page不再对用户可见时触发。Page在此之后进入BACKGROUND状态。

• onForeground()

当Page从BACKGROUND状态重新回到前台时触发。Page在此之后回到INACTIVE状态。

• onStop()

当系统将要销毁Page时触发。

迁移流程

围绕Ability的生命周期,我们来看看业务“跨设备迁移”的具体流程。

业务“跨设备迁移”的本质即通过分布式组网把一个设备的“Ability运行状态”迁移到另外一台设备上。

程序中“跨设备迁移”通过调用Page Ability的迁移接口ContinueAbility,将设备A的业务无缝迁移到指定设备B中。其中,支持迁移的Page以及此Page所包含的所有AbilitySlice必须实现IAbilityContinuation接口。具体接口代码如下:

  1. public interface IAbilityContinuation { 
  2.   //是否可迁移 
  3.     boolean onStartContinuation(); 
  4.  
  5.   //保存数据 
  6.     boolean onSaveData(IntentParams var1); 
  7.  
  8.   //恢复数据 
  9.     boolean onRestoreData(IntentParams var1); 
  10.  
  11.   //迁移完成 
  12.     void onCompleteContinuation(int var1); 
  13.  
  14.     default void onRemoteTerminated() { 
  15.         throw new RuntimeException("Stub!"); 
  16.     } 

图8 业务“跨设备迁移”流程

“跨设备迁移”关键步骤:

“跨设备迁移”数据流转过程:

HarmonyOS“跨设备迁移”动手实例

我们为大家带来一个办公场景下“基于分布式的协同邮件编辑”Demo,作为“跨设备迁移”应用的开发实例。该实例通过模拟不同设备间协同的邮件内容编辑来做一个“内容”跨设备迁移的演示。

目前该Demo已在HarmonyOS官网Codelabs中上线,感兴趣的同学可以参考其具体流程,动手开发一个“跨设备迁移”邮箱Demo。

● Codelabs链接

https://developer.huawei.com/consumer/cn/codelabsPortal/carddetails/Distributed-Mail

通过这一系列的解析,开发者们是不是对HarmonyOS“跨设备迁移”技术有了更深的了解,未来我们还将为大家带来更多HarmonyOS相关技术解读。

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2021-11-03 09:51:45

鸿蒙HarmonyOS应用

2021-08-17 10:20:14

鸿蒙HarmonyOS应用

2020-11-05 10:05:25

App

2021-06-23 15:48:08

鸿蒙HarmonyOS应用

2021-08-13 13:53:23

鸿蒙HarmonyOS应用

2021-07-08 09:42:04

鸿蒙HarmonyOS应用

2023-02-28 09:07:18

ChatGPTAI

2021-01-06 11:21:56

鸿蒙HarmonyOS应用开发

2021-12-21 09:56:47

鸿蒙HarmonyOS应用

2021-03-23 09:52:39

鸿蒙HarmonyOS应用开发

2019-12-06 10:59:20

JavaScript运行引擎

2021-01-12 14:46:34

Kubernetes开发存储

2021-07-12 09:45:36

NameServer 核心Conusmer

2021-07-05 07:51:43

JVM底层Python

2023-08-11 07:44:40

TCP滑动窗口数据

2020-05-21 13:25:43

Spring组件架构

2021-12-01 18:36:35

属性

2017-05-25 11:08:20

虚拟化云计算在线迁移

2015-08-19 10:36:24

Zigbee技术无线通信

2023-11-16 09:01:37

Hadoop数据库
点赞
收藏

51CTO技术栈公众号