鸿蒙OS 分布式任务调度概述
在 HarmonyO S中,分布式任务调度平台对搭载 HarmonyOS 的多设备构筑的“超级虚拟终端”提供统一的组件管理能力,为应用定义统一的能力基线、接口形式、数据结构、服务描述语言,屏蔽硬件差异;支持远程启动、远程调用、业务无缝迁移等分布式任务。
分布式任务调度平台在底层实现 Ability(分布式任务调度的基本组件)跨设备的启动/关闭、连接及断开连接以及迁移等能力,实现跨设备的组件管理:
- 启动和关闭:向开发者提供管理远程 Ability 的能力,即支持启动 Page 模板的 Ability,以及启动、关闭 Service 和 Data 模板的 Ability。
- 连接和断开连接:向开发者提供跨设备控制服务( Service 和 Data 模板的 Ability )的能力,开发者可以通过与远程服务连接及断开连接实现获取或注销跨设备管理服务的对象,达到和本地一致的服务调度。
- 迁移能力:向开发者提供跨设备业务的无缝迁移能力,开发者可以通过调用 Page 模板 Ability 的迁移接口,将本地业务无缝迁移到指定设备中,打通设备间壁垒。
约束与限制
- 开发者需要在 Intent 中设置支持分布式的标记(例如:Intent.FLAG_ABILITYSLICE_MULTI_DEVICE 表示该应用支持分布式调度),否则将无法获得分布式能力。
- 开发者通过在 config.json 中添加分布式数据传输的权限申请:{“name”: “ohos.permission.servicebus.ACCESS_SERVICE”},获取跨设备连接的能力。
- PA( Particle Ability,Service 和 Data 模板的 Ability)的调用支持连接及断开连接、启动及关闭这四类行为,在进行调度时:
- 开发者必须在 Intent 中指定 PA 对应的 bundleName 和 abilityName。
- 当开发者需要跨设备启动、关闭或连接 PA 时,需要在 Intent 中指定对端设备的 deviceId。开发者可通过如设备管理类 DeviceManager 提供的 getDeviceList 获取指定条件下匿名化处理的设备列表,实现对指定设备 PA 的启动/关闭以及连接管理。
- FA(Feature Ability,Page 模板的 Ability)的调用支持启动和迁移行为,在进行调度时:
- 当启动 FA 时,需要开发者在 Intent 中指定对端设备的 deviceId、bundleName 和 abilityName。
- FA 的迁移实现相同 bundleName 和 abilityName 的 FA 跨设备迁移,因此需要指定迁移设备的 deviceId。
鸿蒙OS 发布式任务调度开发指导
场景介绍
开发者在应用中集成分布式调度能力,通过调用指定能力的分布式接口,实现跨设备能力调度。根据 Ability 模板及意图的不同,分布式任务调度向开发者提供以下六种能力:启动远程 FA、启动远程 PA、关闭远程 PA、连接远程 PA、断开连接远程 PA 和 FA 跨设备迁移。下面以设备 A(本地设备)和设备 B(远端设备)为例,进行场景介绍:
- 设备 A 启动设备 B 的 FA:在设备 A 上通过本地应用提供的启动按钮,启动设备 B 上对应的 FA。例如:设备 A 控制设备 B 打开相册,只需开发者在启动 FA 时指定打开相册的意图即可。
- 设备 A 启动设备 B 的 PA:在设备 A 上通过本地应用提供的启动按钮,启动设备 B 上指定的 PA。例如:开发者在启动远程服务时通过意图指定音乐播放服务,即可实现设备 A 启动设备 B 音乐播放的能力。
- 设备 A 关闭设备 B 的 PA:在设备 A 上通过本地应用提供的关闭按钮,关闭设备 B 上指定的 PA。类似启动的过程,开发者在关闭远程服务时通过意图指定音乐播放服务,即可实现关闭设备 B 上该服务的能力。
- 设备 A 连接设备 B 的 PA:在设备 A 上通过本地应用提供的连接按钮,连接设备 B 上指定的 PA。连接后,通过其他功能相关按钮实现控制对端 PA 的能力。通过连接关系,开发者可以实现跨设备的同步服务调度,实现如大型计算任务互助等价值场景。
- 设备 A 与设备 B 的 PA 断开连接:在设备 A 上通过本地应用提供断开连接的按钮,将之前已连接的 PA 断开连接。
- 设备 A 的 FA 迁移至设备B:设备 A 上通过本地应用提供的迁移按钮,将设备 A 的业务无缝迁移到设备B中。通过业务迁移能力,打通设备 A 和设备 B 间的壁垒,实现如文档跨设备编辑、视频从客厅到房间跨设备接续播放等场景。
接口说明
分布式调度平台提供的连接和断开连接 PA、启动远程 FA、启动和关闭 PA 以及迁移 FA 的能力,是实现更多价值性场景的基础。
- 连接远程PA
connectAbility(Intent intent, IAbilityConnection conn)接口提供连接指定设备上 PA 的能力,Intent 中指定待连接 PA 的设备 deviceId、bundleName 和 abilityName。当连接成功后,通过在 conn 定义的 onAbilityConnectDone 回调中获取对端 PA 的服务代理,两者的连接关系则由 conn 维护。具体的参数定义如下表所示:
参数名 |
类型 |
说明 |
intent |
ohos.aafwk.content.Intent |
开发者需在 intent 对应的Operation 中指定待连接 PA 的设备 deviceId、bundleName 和 abilityName。 |
conn |
ohos.aafwk.ability.IAbilityConnection |
当连接成功或失败时,作为连接关系的回调接口。该接口提供连接完成和断开连接完成时的处理逻辑,开发者可根据具体的场景进行定义。 |
- 启动远程FA/PA startAbility(Intent intent) 接口提供启动指定设备上 FA 和 PA 的能力,Intent 中指定待启动 FA/PA 的设备 deviceId、bundleName 和 abilityName。具体参数定义如下表所示:
参数名 |
类型 |
说明 |
intent |
ohos.aafwk.content.Intent |
当开发者需要调用该接口启动远程 PA 时,需要指定待启动 PA 的设备 deviceId、bundleName 和 abilityName。若不指定设备deviceId,则无法跨设备调用 PA。类似地,在启动FA时,也需要开发者指定启动 FA 的设备 deviceId、bundleName 和 abilityName。 |
分布式调度平台还会提供与上述功能相对应的断开远程 PA 的连接和关闭远程 PA 的接口,相关的参数与连接、启动的接口类似。
1.断开远程 PA 连接:disconnectAbility (IAbilityConnection conn)。 2.关闭远程 PA:boolean stopAbility (Intent intent)。
- 迁移FA
continueAbility(String deviceId)接口提供将本地FA迁移到指定设备上的能力,需要开发者在调用时指定目标设备的 deviceId。具体参数定义如下表所示:
说明
Ability 和 AbilitySlice 类均需要实现 IAbilityContinuation 及其方法,才可以实现 FA 迁移。
参数名 |
类型 |
说明 |
deviceId |
String |
当开发者需要调用该接口将本地 FA 迁移时,需要指定目标设备的 deviceId。 |