在了解了分布式任务调度的实现原理之后,接下来介绍如何实现分布式任务调度。
要实现分布式任务调度,开发者需要在应用中做如下操作。
(1)在Intent中设置支持分布式的标记(如Intent.FLAG_ABILITYSLICE_MULTI_DEVICE表示该应用支持分布式调度),否则将无法获得分布式能力。
(2)在config.json中的reqPermissions字段里添加多设备协同访问的权限申请:三方应用使用{“name”:“ohos.permission.DISTRIBUTED_DATASYNC”}。
(3)PA的调用支持连接及断开连接、启动及关闭这四类行为,在进行调度时:
①必须在Intent中指定PA对应的bundleName和abilityName。
②当需要跨设备启动、关闭或连接PA时,需要在Intent中指定对端设备的deviceId。可通过如设备管理类DeviceManager提供的getDeviceList获取指定条件下匿名化处理的设备列表,实现对指定设备PA的启动/关闭以及连接管理。
(4)FA的调用支持启动和迁移行为,在进行调度时:
①当启动FA时,需要开发者在Intent中指定对端设备的deviceId、bundleName和abilityName。
②实现相同 bundleName 和 abilityName 的 FA要实现跨设备迁移,需要指定迁移设备的devi-ceId。
根据Ability模板及意图的不同,分布式任务调度向开发者提供以下六种能力:启动远程FA、启动远程PA、关闭远程PA、连接远程PA、断开连接远程PA和FA跨设备迁移。下面以设备A(本地设备)和设备B(远端设备)为例进行场景介绍。
(1)设备A启动设备B的FA:在设备A上通过本地应用提供的启动按钮启动设备B上对应的FA。例如,设备A控制设备B打开相册,只需开发者在启动FA时指定打开相册的意图即可。
(2)设备A启动设备B的PA:在设备A上通过本地应用提供的启动按钮启动设备B上指定的PA。例如,开发者在启动远程服务时通过意图指定音乐播放服务,即可实现设备A启动设备B音乐播放的能力。
(3)设备A关闭设备B的PA:在设备A上通过本地应用提供的关闭按钮关闭设备B上指定的PA。类似启动的过程,开发者在关闭远程服务时通过意图指定音乐播放服务,即可实现关闭设备B上该服务的能力。
(4)设备A连接设备B的PA:在设备A上通过本地应用提供的连接按钮连接设备B上指定的PA。连接后,通过其他功能相关按钮实现控制对端PA的能力。通过连接关系,开发者可以实现跨设备的同步服务调度,实现如大型计算任务互助等价值场景。
(5)设备A与设备B的PA断开连接:在设备A上通过本地应用提供的断开连接按钮将之前已连接的PA断开连接。
(6)设备A的FA迁移至设备B:设备A上通过本地应用提供的迁移按钮将设备A的业务无缝迁移到设备B中。通过业务迁移能力,打通设备A和设备B间的壁垒,实现如文档跨设备编辑、视频从客厅到房间跨设备接续播放等场景。