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

一、接口说明

接口名接口描述
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.mzph.cn/news/630500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024.1.17 网络编程 作业

思维导图 练习题 广播服务器端 #include <myhead.h>int main(int argc, char const *argv[]) {//创建套接字int sfd socket(AF_INET, SOCK_DGRAM, 0);//填充网络信息结构体struct sockaddr_in cin;cin.sin_family AF_INET;cin.sin_port htons(6789);cin.sin_addr.s_…

JavaScript十大取整方法

在日常的开发过程中会有各种各样的需求会用到很多不同取整的方法&#xff0c;但是下面的这些方法中应该还是会有你没有用过的方法&#xff0c;了解一下吧。 parseInt() // js内置函数&#xff0c;注意接受参数是string&#xff0c;所以调用该方法时存在类型转换 parseInt(2.2…

Rxjava链式调用解析

本文以下面代码为例逐步解析 Observable.just("数据源").map(new Function<String, Integer>() {Overridepublic Integer apply(String s) throws Exception {return 1;}}).filter(integer -> {return integer 1;}).subscribeOn(Schedulers.io()).observe…

vue脚手架,路由,过滤器,自定义指令

● vue是单⻚⾯应⽤程序 ● 什么是路由 ○ 后端路由 ■ 对于普通的⽹站&#xff0c;所有的超链接都是URL地址&#xff0c;所有的URL地址都对应服务器上对应的资源 ○ 前端路由 ■ 对于单⻚⾯应⽤程序来说&#xff0c;主要通过URL中的hash ( # 号) 来实现不同⻚⾯之间的切换…

element-ui表单验证同时用change与blur一起验证

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 当审批时不通过审批意见要必须输入&#xff0c; 1&#xff1a;如果用change验证的话删除所有内容时报错是massage的提示&#xff0c;但是在失去焦点的时候报错就成了英文&#xff0c;如下图&#xf…

SQL语句详解四-DQL(数据查询语言-多表查询一)

文章目录 表和表的关系一对一关系一对多、多对一关系多对多关系 表和表的关系 概述&#xff1a;数据库中表的关系有三种&#xff0c;一对一关系、一对多的关系、多对多的关系。 一对一关系 例如&#xff1a;一个人只能有一个身份证号&#xff0c;一个身份证号只属于一个人 示…

STM32F103标准外设库——RCC时钟(六)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

10个常用的正则表达式

1 电话号码 let r1 /^1[3-9]\d{9}$/g console.log(r1.exec(18596932371)) 2 qq号 let r2 /^[1-9][0-9]{4,9}$/g console.log(r2.exec(123456)) 3 十六进制的方式表示颜色 let r3 /^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/g // # 可能可有可无&#xff0c;如果不需要#&a…

PyQt5零基础入门(四)——信号与槽

信号与槽 前言信号与槽单对单直接连接使用lambda表达式 信号与槽多对多一个信号连接多个槽多个信号连接一个槽信号与信号连接 自定义信号 前言 PyQt5的信号与槽是一种对象之间的通信机制&#xff0c;允许一个QObject对象发出信号&#xff0c;与之相连接的槽函数将会自动执行。…

自动驾驶记忆泊车功能规范

目录 1. 文档范围. 5 2. 功能描述. 6 3. 状态机. 8 3.1 状态描述. 8 3.2 状态迁移条件. 9 4. 功能清单. 19 5. 功能流程. 30 5.1 功能逻辑. 30 5.1.1 HU路线列表查看. 30 5.1.2 HU路线学习. 30 5.1.3 HU使用路线匹配. 52…

漏洞复现-科荣AIO UtilServlet任意命令执行漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

【MySQL】管理用户

DCL-管理用户 查询用户 use mysql; select * from user;创建用户 create user 用户名主机名 identified by 密码;修改用户密码 alter user 用户名主机名 identidied with mysql_native_password by 新密码;删除用户 drop user 用户名主机名;创建用户test&#xff0c;只能够…

地震预测系统项目实现

整个项目思路即在一组观测数据中&#xff0c;地震专家&#xff08;即用户&#xff09;输入观测窗口的最小数量和最大数量&#xff0c;进行预测峰值点 数据文件如图所示&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include<fstream> #include<string> #include&…

CSS 设置背景图片

文章目录 设置背景颜色设置背景图片背景图片偏移量计算原点背景图片尺寸设置背景图片位置设置背景图片重复方式设置背景范围设置背景图片是否跟随元素移动测试背景图片 本文概念部分参考&#xff1a;CSS背景background设置 设置背景颜色 background-color 设置背景颜色 设置…

当我们谈上下文切换时我们在谈些什么

相信不少小伙伴面试时&#xff0c;都被问到过这样一个问题&#xff1a;进程和线程的区别是什么&#xff1f;大学老师会告诉我们&#xff1a;进程是资源分配的基本单位&#xff0c;线程是调度的基本单位。说到调度&#xff0c;就不得不提到CPU的上下文切换了。 何为CPU上下文切换…

香港服务器托管:你对服务器托管了解多少?

在当今数字化的时代&#xff0c;服务器托管已成为企业和网站运营的关键一环。对于许多企业来说&#xff0c;如何选择一个安全、稳定、高效的服务器托管方案&#xff0c;成为了确保业务连续性和数据安全的重要课题。那么&#xff0c;究竟什么是服务器托管&#xff0c;它又有哪些…

使用WAF防御网络上的隐蔽威胁之扫描器

在网络安全领域&#xff0c;扫描器是用于侦察和识别网络系统漏洞的工具。 它们可以帮助网络管理员识别安全漏洞&#xff0c;也可能被攻击者用来寻找攻击目标。 扫描器的基本概念 定义&#xff1a;扫描器是一种自动化工具&#xff0c;用于探测网络和服务器中的漏洞、开放端口、…

手机崩溃日志的查找与分析

手机崩溃日志的查找与分析 摘要 本文介绍了一款名为克魔助手的iOS应用日志查看工具&#xff0c;该工具可以方便地查看iPhone设备上应用和系统运行时的实时日志和崩溃日志。同时还提供了崩溃日志的分析查看模块&#xff0c;可以对苹果崩溃日志进行符号化、格式化和分析&#x…

统计学R语言 实验3 点估计

统计学R语言 实验3 点估计 一、实验目的 1. 掌握理解点估计的相关概念和方法。 2. 掌握理解点估计的估计质量好坏判断方法。 3. 熟悉R语言等语言的集成开发环境。 二、实验分析与内容 某灯泡厂从某日生产的一批灯泡中抽取10个灯泡进行寿命试验&#xff0c;得到灯泡寿命&…

SQL语句详解四-DQL(数据查询语言-多表查询二)

文章目录 多表查询内连接查询隐式内连接显示内连接注意事项 外连接查询左外连接右外连接 子查询子查询单行单列子查询多行单列子查询多行多列 多表查询 接下来需要用到的表 -- 创建公司数据库 CREATE DATABASE IF NOT EXISTS company CHARACTER SET utf8;-- 使用数据库 USE com…