当前位置: 首页 > news >正文

鸿蒙原生应用/元服务开发-延迟任务开发实现(二)

一、接口说明

接口名接口描述
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参数

名称类型必填说明
workIdnumber延迟任务ID。
bundleNamestring延迟任务包名。
abilityNamestring延迟任务回调通知的组件名。
networkTypeNetworkType网络类型。
isChargingboolean是否充电。- true表示充电触发延迟回调,false表示不充电触发延迟回调。
chargerTypeChargingType充电类型。
batteryLevelnumber电量。
batteryStatusBatteryStatus电池状态。
storageRequestStorageRequest存储状态。
isRepeatboolean是否循环任务。- true表示循环任务,false表示非循环任务。
repeatCycleTimenumber循环间隔,单位为毫秒。
repeatCountnumber循环次数。
isPersistedboolean是否持久化保存工作。- true表示持久化保存工作。false表示非持久化保存工作。
isDeepIdleboolean是否要求设备进入空闲状态。- true表示需要,false表示不需要。
idleWaitTimenumber空闲等待时间,单位为毫秒。
parameters[key: string]: numberstringboolean

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官方开发文档学习整理

http://www.lryc.cn/news/283410.html

相关文章:

  • 机器学习在什么场景下最常用-九五小庞
  • 利用IP应用场景API识别真实用户
  • Hugging Face怎么通过国内镜像去进行模型下载(hf-mirror.com)
  • POKT Network 开启周期性通缩,该计划将持续至 2025 年
  • LRU Cache
  • 软件测试面试题整理
  • C++三剑客之std::variant(二):深入剖析
  • 实验一 安装和使用Oracle数据库
  • 软件工程研究生后期总结
  • Java爬虫爬取图片壁纸
  • 红队打靶练习:HOLYNIX: V1
  • elasticsearch[二]-DSL查询语法:全文检索、精准查询(term/range)、地理坐标查询(矩阵、范围)、复合查询(相关性算法)、布尔查询
  • Microsoft Word 设置底纹
  • 【大数据】Flink 详解(九):SQL 篇 Ⅱ
  • workflow源码解析:GoTask
  • SpringMVC入门案例
  • Docker本地私有仓库搭建配置指导
  • python 通过定时任务执行pytest case
  • 算法面试题:合并两个有序链表
  • LaWGPT安装和使用教程的复现版本【细节满满】
  • 西门子博途用SCL语言写的入栈出栈
  • 密码产品推介 | 沃通安全电子签章系统(ES-1)
  • 蓝桥杯真题(Python)每日练Day1
  • IDEA怎么用Devtools热部署
  • boost.circular_buffer的使用和介绍
  • 深入理解Java中的ThreadLocal
  • 【重点】【DP】300. 最长递增子序列
  • 使用freessl为网站获取https证书及配置详细步骤
  • Java-初识正则表达式 以及 练习
  • 【Flutter 问题系列第 80 篇】TextField 输入框组件限制可输入的最大长度后,输入的内容中包含表情符号时,获取输入的内容数还是会超出限制的问题