赞
踩
接口名 | 接口描述 |
---|---|
startWork(work: WorkInfo): void; | 申请延迟任务 |
stopWork(work: WorkInfo, needCancel?: boolean): void; | 取消延迟任务 |
getWorkStatus(workId: number, callback: AsyncCallback>): void; | 获取延迟任务状态(Callback形式) |
getWorkStatus(workId: number): Promise; | 获取延迟任务状态(Promise形式) |
obtainAllWorks(callback: AsyncCallback>): void; | 获取所有延迟任务(Callback形式) |
obtainAllWorks(): Promise>; | 获取所有延迟任务(Promise形式) |
stopAndClearWorks(): void; | 停止并清除任务 |
isLastWorkTimeOut(workId: number, AsyncCallback): void; | 获取上次任务是否超时(针对RepeatWork,Callback形式) |
isLastWorkTimeOut(workId: number): Promise; | 获取上次任务是否超时(针对RepeatWork,Promise形式) |
表2 延迟任务主要接口
以下是延迟任务开发使用的相关接口,更多接口及使用方式请见延迟任务文档。
表3 WorkInfo参数
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
workId | number | 是 | 延迟任务ID。 |
bundleName | string | 是 | 延迟任务包名。 |
abilityName | string | 是 | 延迟任务回调通知的组件名。 |
networkType | NetworkType | 否 | 网络类型。 |
isCharging | boolean | 否 | 是否充电。- true表示充电触发延迟回调,false表示不充电触发延迟回调。 |
chargerType | ChargingType | 否 | 充电类型。 |
batteryLevel | number | 否 | 电量。 |
batteryStatus | BatteryStatus | 否 | 电池状态。 |
storageRequest | StorageRequest | 否 | 存储状态。 |
isRepeat | boolean | 否 | 是否循环任务。- true表示循环任务,false表示非循环任务。 |
repeatCycleTime | number | 否 | 循环间隔,单位为毫秒。 |
repeatCount | number | 否 | 循环次数。 |
isPersisted | boolean | 否 | 是否持久化保存工作。- true表示持久化保存工作。false表示非持久化保存工作。 |
isDeepIdle | boolean | 否 | 是否要求设备进入空闲状态。- true表示需要,false表示不需要。 |
idleWaitTime | number | 否 | 空闲等待时间,单位为毫秒。 |
parameters | [key: string]: number | string | boolean |
WorkInfo参数用于设置应用条件,参数设置时需遵循以下规则:
workId、bundleName、abilityName为必填项,bundleName需为本应用包名。
携带参数信息仅支持number、string、boolean三种类型。
至少设置一个满足的条件,包括网络类型、充电类型、存储状态、电池状态、定时状态等。
对于重复任务,任务执行间隔至少20分钟。设置重复任务时间间隔时,须同时设置是否循环或循环次数中的一个。
表4 延迟任务回调接口
以下是延迟任务回调开发使用的相关接口。
接口名 | 接口描述 |
---|---|
onWorkStart(work: workScheduler.WorkInfo): void | 延迟调度任务开始的回调 |
onWorkStop(work: workScheduler.WorkInfo): void | 延迟调度任务结束的回调 |
延迟任务调度开发步骤分为两步:实现延迟任务调度扩展能力、实现延迟任务调度。
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官方开发文档学习整理
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。