鸿蒙原生应用/元服务开发-延迟任务开发实现(二)
一、接口说明
表2 延迟任务主要接口
以下是延迟任务开发使用的相关接口,更多接口及使用方式请见延迟任务文档。
表3 WorkInfo参数
WorkInfo参数用于设置应用条件,参数设置时需遵循以下规则:
workId、bundleName、abilityName为必填项,bundleName需为本应用包名。
携带参数信息仅支持number、string、boolean三种类型。
至少设置一个满足的条件,包括网络类型、充电类型、存储状态、电池状态、定时状态等。
对于重复任务,任务执行间隔至少20分钟。设置重复任务时间间隔时,须同时设置是否循环或循环次数中的一个。
表4 延迟任务回调接口
以下是延迟任务回调开发使用的相关接口。
二、开发步骤
延迟任务调度开发步骤分为两步:实现延迟任务调度扩展能力、实现延迟任务调度。
1.延迟任务调度扩展能力:实现WorkSchedulerExtensionAbility开始和结束的回调接口。
2.延迟任务调度:调用延迟任务接口,实现延迟任务申请、取消等功能。
实现延迟任务回调拓展能力
1.新建工程目录。
在工程entry Module对应的ets目录(./entry/src/main/ets)下,新建目录及ArkTS文件,例如新建一个目录并命名为extension。在extension目录下,新建一个ArkTS文件并命名为WorkSchedulerExtension.ets,用以实现延迟任务回调接口。
2.导入模块。
import WorkSchedulerExtensionAbility from '@ohos.WorkSchedulerExtensionAbility';
import workScheduler from '@ohos.resourceschedule.workScheduler';
3.实现WorkSchedulerExtension生命周期接口。
export default class MyWorkSchedulerExtensionAbility extends WorkSchedulerExtensionAbility {
// 延迟任务开始回调
onWorkStart(workInfo: workScheduler.WorkInfo) {
console.info(`onWorkStart, workInfo = ${JSON.stringify(workInfo)}`);
}
// 延迟任务结束回调
onWorkStop(workInfo: workScheduler.WorkInfo) {
console.info(`onWorkStop, workInfo is ${JSON.stringify(workInfo)}`);
}
}
4.在module.json5配置文件中注册WorkSchedulerExtensionAbility,并设置如下标签:
type标签设置为“workScheduler”。
srcEntry标签设置为当前ExtensionAbility组件所对应的代码路径。
{
"module": {
"extensionAbilities": [
{
"name": "MyWorkSchedulerExtensionAbility",
"srcEntry": "./ets/WorkSchedulerExtension/WorkSchedulerExtension.ets",
"label": "$string:WorkSchedulerExtensionAbility_label",
"description": "$string:WorkSchedulerExtensionAbility_desc",
"type": "workScheduler"
}
]
}
}
实现延迟任务调度
1.导入模块。
import workScheduler from '@ohos.resourceschedule.workScheduler';
import { BusinessError } from '@ohos.base';
2.申请延迟任务。
// 创建workinfo
const workInfo: workScheduler.WorkInfo = {
workId: 1,
networkType: workScheduler.NetworkType.NETWORK_TYPE_WIFI,
bundleName: 'com.example.application',
abilityName: 'MyWorkSchedulerExtensionAbility'
}
try {
workScheduler.startWork(workInfo);
console.info(`startWork success`);
} catch (error) {
console.error(`startWork failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
}
3.取消延迟任务。
// 创建workinfo
const workInfo: workScheduler.WorkInfo = {
workId: 1,
networkType: workScheduler.NetworkType.NETWORK_TYPE_WIFI,
bundleName: 'com.example.application',
abilityName: 'MyWorkSchedulerExtensionAbility'
}
try {
workScheduler.stopWork(workInfo);
console.info(`stopWork success`);
} catch (error) {
console.error(`stopWork failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
}
本文根据HarmonyOS官方开发文档学习整理