鸿蒙子系统解读-分布式任务调度篇
本文作者:江苏润和软件股份有限公司 郎建中
1.总体描述
1.1.总体介绍
分布式任务调度基于分布式软总线、分布式数据管理、分布式Profile等技术特性,构建统一的分布式服务管理(发现、同步、注册、调用)机制,支持对跨设备的应用进行远程启动、远程调用、远程连接以及迁移等操作,能够根据不同设备的能力、位置、业务运行状态、资源使用情况,以及用户的习惯和意图,选择合适的设备运行分布式任务。
下图是分布式调度子系统在整个鸿蒙系统中的位置:
下图表示分布式调度的示意图:
从A设备的某个FA(Feature Ability代表有界面的元能力)应用调用设备B上的FA应用。这里的调用的含义包含了:
a、启动和关闭:启动和关闭远程设备上的ability(包括:基于Page的ability、基于Service的ability、基于Data模板的ability)
b、连接和断开:向开发者提供跨设备控制服务的能力。这里的服务表示:基于Server和Data模板的ability。
c、迁移能力:向开发者提供跨设备的业务无缝迁移能力。开发者可以通过基于Page的ability的迁移接口,将本地的业务迁移到指定的设备中。
1.2.分布式调度中的两种设备
在分布式调度中,存在两个角色。按照上图有设备A和设备B。一般来说设备A是指智慧屏设备,设备B只一般的轻量设备。智慧屏设备一般指智能TV、手机等。轻量设备一般只Camera、手表等
下面图示表示这两种设备的系统架构图:
(约束:如果要实现分布式调度,目前智慧屏设备和轻量设备必须处于同一个局域网段内)
从鸿蒙系统的整体系统框架图可以看出,分布式调度子系统及周边的依赖模块如下图:
1.3.分布式调度代码示例–启动远程FA
1.3.1.智慧屏上的代码示例
1.获取目标在线从设备的设备ID
// 引入设备选择头文件
import ohos.distributedschedule.interwork.DeviceInfo;
import ohos.distributedschedule.interwork.DeviceManager;
// 获取在线设备列表
List<DeviceInfo> deviceInfoListOnline = DeviceManager.getDmsDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE);
String remote_device_id;
if (deviceInfoListOnline.size() > 0)
{
remote_device_id = deviceInfoListOnline[0].GetDeviceId(); // 获取在线列表中第一台设备的设备ID
}
2.构造want,首先使用ElementName类表明需要启动的远端设备ID,包名,元能力类名,传入want中,然后设置want中的分布式标志位Want.FLAG_ABILITYSLICE_MULTI_DEVICE表示需要远程启动
// 引入相关头文件
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Want;
import ohos.bundle.ElementName;
// 启动远程设备FA
Want want = new Want();