本文是对分布式任务调度的一个技术教程,以一个简单的案例来讲解。

正文部分分为两个部分:
第一部分是对分布式任务调度的简单概述
第二部分是分布式任务调度的一个简单案例(跨设备 FA 的拉起)

分布式任务调度的简单概述
Ability 可以分为 FA(Feature Ability)和 PA(Particle Ability)两种类型。
①FA 支持 Page Ability
Page 模板:FA 唯一支持的模板,用于提供与用户交互的能力。一个 Page 实例可以包含一组相关页面,每个页面用一个 AbilitySlice 实例表示。
②PA 支持 Service Ability 和 Data Ability

根据 Ability 模板及意图的不同,分布式任务调度向开发者提供以下六种能力:
启动远程 FA
启动远程 PA
关闭远程 PA
连接远程 PA
断开连接远程 PA
FA 跨设备迁移
“跨设备 FA 的拉起”的教程
①创建项目
DevEco Studio 下载安装成功后,打开 DevEco Studio,点击左上角的 File,点击 New,再选择 New Project。

②申请权限
"reqPermissions": [
{
"name": "ohos.permission.DISTRIBUTED_DATASYNC"
},
{
"name": "ohos.permission.GET_DISTRIBUTED_DEVICE_INFO"
}
]
在 entry>src>main>Java>MainAbility 文件里添加敏感权限(非敏感权限在该文件里可加可不加),在 onStart 函数里添加以下代码:
requestPermissionsFromUser(new String[]{"ohos.permission.DISTRIBUTED_DATASYNC"},0);
③界面布局

在 entry>src>main>resources>base>layout>ability_main.xml 文件里添加一个按钮组件,加入唯一标识符 id 并配置好其他相应的属性,代码如下:
<Button
ohos:height="match_content"
ohos:width="match_parent"
ohos:id="$+id:start"
ohos:top_margin="100px"
ohos:text="跨设备FA拉起"
ohos:text_size="30fp"
ohos:background_element="green"/>
为了方便+好看,我把上方文本组件的 id 跟 text 改了一下:
ohos:id="$+id:text"
ohos:text="分布式任务调度"
④设置点击事件
在 entry>src>main>Java>slice>MainAbilitySlice 文件里的 onStart 下方定义一个函数来设置按钮的点击事件:
获取分布式组网内的设备列表和设备信息(其中 FLAG_GET_ONLINE_DEVICE 是获取在线设备,可以根据需要选择离线 OFFLINE 或者全部设备 ALL)。
get(0) 是指列表 devicelist 第一个元素。
operation 是用来封装与 intent 相关的参数和操作,这里涉及的是 AbilityName、BundleName、DevicedId、Flags。
private void run_start(){
Button start=(Button)findComponentById(ResourceTable.Id_start);
start.setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
List<DeviceInfo> deviceList= DeviceManager.getDeviceList(ohos.distributedschedule.interwork.DeviceInfo.FLAG_GET_ONLINE_DEVICE);
deviceId = deviceList.get(0).getDeviceId();
Intent intent=new Intent();
Operation operation = new Intent.OperationBuilder()
.withAbilityName(MainAbility.class.getName())
.withBundleName(getBundleName())
.withDeviceId(deviceId)
.withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE).build();
intent.setOperation(operation);
startAbility(intent);
}
});
}
输入时注意以下几个点,不要选错了;如果有标红,移到上面看看是不是引入包加错了:



在 onStart 里调用上面的点击函数 run_start(),别忘了要定义变量 deviceId:

例如新建一个 Ability 文件和一个 Slilce 文件,然后在这个文件图二的位置作相应修改,然后修改图一的位置为这个新建的 Ability。


更多学习资料关注【Awesome-Harmony_木棉花】:
https://gitee.com/hiharmonica/awesome-harmony-os-kapok
👇点击关注鸿蒙技术社区👇
了解鸿蒙一手资讯

点“阅读原文”下载附件




