鸿蒙原生应用/元服务开发-延迟任务开发实现(二)
一、接口说明
| 接口名 | 接口描述 |
|---|---|
| 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官方开发文档学习整理
相关文章:
鸿蒙原生应用/元服务开发-延迟任务开发实现(二)
一、接口说明 接口名接口描述startWork(work: WorkInfo): void;申请延迟任务stopWork(work: WorkInfo, needCancel?: boolean): void;取消延迟任务getWorkStatus(workId: number, callback: AsyncCallback>): void;获取延迟任务状态(Callback形式)g…...
机器学习在什么场景下最常用-九五小庞
机器学习在多个场景中都有广泛的应用,下面是一些常见的应用场景: 自然语言处理(NLP):如语音识别、自动翻译、情感分析、垃圾邮件过滤等。数据挖掘和分析:如市场分析、用户画像、推荐系统、欺诈检测等。智能…...
利用IP应用场景API识别真实用户
引言 在当今数字化时代,随着互联网的普及和应用的广泛,验证用户身份的重要性变得越来越突出。在许多场景中,特别是在涉及安全性、用户体验以及个人隐私保护方面,确定用户的真实身份至关重要。而IP应用场景API则是一种强大的工具&…...
Hugging Face怎么通过国内镜像去进行模型下载(hf-mirror.com)
一、引言 Hugging Face 🤗是一家专注于自然语言处理(NLP)技术的公司,以其开源贡献和先进的机器学习模型而闻名。该公司最著名的产品是 Transformers 库,这是一个广泛使用的 Python 库,它提供了大量预训练模…...
POKT Network 开启周期性通缩,该计划将持续至 2025 年
POKT Network(也被称为 Pocket Network)在通证经济模型上完成了重大的改进,不仅将通货膨胀率降至 5% 以下,并使 POKT 通证在 2025 年走向通缩的轨迹上,预计到2024 年年底通货膨胀率将降至 2% 以下。POKT Network 的 “…...
LRU Cache
文章目录 1. 什么是LRU Cache2. LRU Cache的实现3. LRU Cache的OJ题目分析AC代码 1. 什么是LRU Cache LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。 什么是Cache? 狭义的Cache指的是位于CPU和主存间的快速RAM…...
软件测试面试题整理
软件测试的几个阶段 在进行Beta测试之前和之后,通常会进行以下几种测试: 内部测试(Internal Testing) 在Beta测试之前,开发团队会进行内部测试,对软件进行全面的测试。这个阶段包括单元测试、集成测试和系…...
C++三剑客之std::variant(二):深入剖析
目录 1.概述 2.辅助类介绍 2.1.std::negation 2.2.std::conjunction 2.3.std::is_destructible 2.4.std::is_object 2.5.is_default_constructible 2.6.std::is_trivially_destructible 2.7.std::in_place_type和std::in_place_index 3.原理分析 3.1.存储分析 3.2.…...
实验一 安装和使用Oracle数据库
🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…...
软件工程研究生后期总结
写这篇随笔的时候,我已经处于研究生阶段的后期,只剩下一个硕论答辩即可结束研究生生涯。趁有闲暇时间,我希望可以从实习、兼职、论文和求职等几个角度重新整理一下研究生后期的工作和收获,以及对未来工作和生活做出展望。 首先简…...
Java爬虫爬取图片壁纸
Java爬虫 以sougou图片为例:https://pic.sogou.com/ JDK17、SpringBoot3.2.X、hutool5.8.24实现Java爬虫,爬取页面图片 项目介绍 开发工具:IDEA2023.2.5 JDK:Java17 SpringBoot:3.2.x 通过 SpringBoot 快速构建开发环境…...
红队打靶练习:HOLYNIX: V1
目录 信息收集 1、arp 2、netdiscover 3、nmap 4、nikto whatweb 目录探测 1、gobuster 2、dirsearch 3、dirb 4、feroxbuster WEB sqlmap 1、爆库 2、爆表 3、爆列 4、爆字段 后台登录 1、文件上传 2、文件包含 3、越权漏洞 反弹shell 提权 总结 信息…...
elasticsearch[二]-DSL查询语法:全文检索、精准查询(term/range)、地理坐标查询(矩阵、范围)、复合查询(相关性算法)、布尔查询
ES-DSL查询语法(全文检索、精准查询、地理坐标查询) 1.DSL查询文档 elasticsearch 的查询依然是基于 JSON 风格的 DSL 来实现的。 1.1.DSL 查询分类 Elasticsearch 提供了基于 JSON 的 DSL(Domain Specific Language)来定义查…...
Microsoft Word 设置底纹
Microsoft Word 设置底纹 References 打开文档页面,选中特定段落或全部文档 在“段落”中单击“边框”下三角按钮 在列表中选择“边框和底纹”选项 在“边框和底纹”对话框中单击“底纹”选项卡 在图案样式和图案颜色列表中设置合适颜色的底纹,单击“确…...
【大数据】Flink 详解(九):SQL 篇 Ⅱ
《Flink 详解》系列(已完结),共包含以下 10 10 10 篇文章: 【大数据】Flink 详解(一):基础篇【大数据】Flink 详解(二):核心篇 Ⅰ【大数据】Flink 详解&…...
workflow源码解析:GoTask
关于go task 提供了另一种更简单的使用计算任务的方法,模仿go语言实现的go task。 使用go task来实计算任务无需定义输入与输出,所有数据通过函数参数传递。 与ThreadTask 区别 ThreadTask 是有模板,IN 和 OUT, ThreadTask 依赖…...
SpringMVC入门案例
引言 Spring MVC是一个基于MVC架构的Web框架,它的主要作用是帮助开发者构建Web应用程序。它提供了一个强大的模型驱动的开发方式,可以帮助开发者实现Web应用程序的各种功能,如请求处理、数据绑定、视图渲染、异常处理等。 开发步骤 1.创建we…...
Docker本地私有仓库搭建配置指导
一、说明 因内网主机需要拉取镜像进行Docker应用,因此需要一台带外主机作为内网私有仓库来提供内外其他docker业务主机使用。参考架构如下: 相关资源:加密、Distribution registry、Create and Configure Docker Registry、Registry部署、D…...
python 通过定时任务执行pytest case
这段Python代码使用了schedule库来安排一个任务,在每天的22:50时运行。这个任务执行一个命令来运行pytest,并生成一个报告。 代码开始时将job_done变量设为False,然后运行预定的任务。一旦任务完成,将job_done设置为True并跳出循…...
算法面试题:合并两个有序链表
描述:给定两个按非递减顺序排列的链表,合并两个链表,并将结果按非递减顺序排列。 例如: # 链表 1: 1 -> 2 -> 4 # 链表 2: 1 -> 3 -> 4合并后的链表应该是:1 -> 1 -> 2 -> 3 -> 4 -> 4 …...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...
AD学习(3)
1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分: (1)PCB焊盘:表层的铜 ,top层的铜 (2)管脚序号:用来关联原理图中的管脚的序号,原理图的序号需要和PCB封装一一…...
欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!
多连接 BLE 怎么设计服务不会乱?分层思维来救场! 作者按: 你是不是也遇到过 BLE 多连接时,调试现场像网吧“掉线风暴”? 温度传感器连上了,心率带丢了;一边 OTA 更新,一边通知卡壳。…...
OpenGL-什么是软OpenGL/软渲染/软光栅?
软OpenGL(Software OpenGL)或者软渲染指完全通过CPU模拟实现的OpenGL渲染方式(包括几何处理、光栅化、着色等),不依赖GPU硬件加速。这种模式通常性能较低,但兼容性极强,常用于不支持硬件加速…...
[特殊字符] Spring Boot底层原理深度解析与高级面试题精析
一、Spring Boot底层原理详解 Spring Boot的核心设计哲学是约定优于配置和自动装配,通过简化传统Spring应用的初始化和配置流程,显著提升开发效率。其底层原理可拆解为以下核心机制: 自动装配(Auto-Configuration) 核…...
暴雨新专利解决服务器噪音与性能悖论
6月1日,我国首部数据中心绿色化评价方面国家标准《绿色数据中心评价》正式实施,为我国数据中心的绿色低碳建设提供了明确指引。《评价》首次将噪音控制纳入国家级绿色评价体系,要求从设计隔声结构到运维定期监测实现闭环管控,加速…...
