开天辟地 HarmonyOS(鸿蒙) - 后台: 延迟任务(由系统决策,在合适的时候执行)
开天辟地 HarmonyOS(鸿蒙) - 后台: 延迟任务(由系统决策,在合适的时候执行)
示例如下:
pages\background\DeferredTaskDemo.ets
/*
* 延迟任务(由系统决策,在合适的时候执行)
*
* 延迟任务是由系统统一决策并调用,系统会根据应用的活跃程度决定多长时间执行一次(最快 2 个小时)
* 延迟任务每次执行时,最多运行 2 分钟
* 延迟任务支持在 app 死掉后执行
*
* 1、继承 WorkSchedulerExtensionAbility 实现自定义的延迟任务(参见 MyWorkSchedulerExtensionAbility.ets)
* 2、需要在 src/main/module.json5 中添加指定的延迟任务,类似如下
* {
* "module": {
* "extensionAbilities": [
* {
* "name": "MyWorkSchedulerExtensionAbility", // 延迟任务的类名
* "srcEntry": "./ets/pages/background/MyWorkSchedulerExtensionAbility.ets", // 延迟任务的类的所属文件
* "type": "workScheduler" // 延迟任务
* }
* ],
* }
* }
*/
import { TitleBar } from '../TitleBar';
import { workScheduler } from '@kit.BackgroundTasksKit';
import { BusinessError } from '@kit.BasicServicesKit';
@Entry
@Component
struct DeferredTaskDemo {
build() {
Column() {
TitleBar()
Tabs() {
TabContent() { MySample1() }.tabBar('基础').align(Alignment.Top)
}
.scrollable(true)
.barMode(BarMode.Scrollable)
.layoutWeight(1)
}
}
}
@Component
struct MySample1 {
@State message: string = ""
myWorkInfo: workScheduler.WorkInfo | undefined = undefined
// 申请延迟任务
startWork() {
this.myWorkInfo = {
workId: 1,
// 网络连接到 wifi 时才会执行
// 注:还有一些其他限制条件,比如是否在充电、电量多少、存储状态等,必须至少设置一个限制条件
networkType: workScheduler.NetworkType.NETWORK_TYPE_WIFI,
bundleName: 'com.webabcd.harmonydemo', // bundle 名称
abilityName: 'MyWorkSchedulerExtensionAbility', // 自定义的延迟任务的类名
isRepeat: true, // 是否是重复任务(最快 2 个小时重复执行一次,每次最多运行 2 分钟)
}
try {
// 申请延迟任务
workScheduler.startWork(this.myWorkInfo);
this.message = `startWork 成功`;
} catch (error) {
let err = error as BusinessError;
this.message =`startWork 失败, errCode${err.code}, errMessage:${err.message}`;
}
}
// 取消延迟任务
stopWork() {
try {
// 取消延迟任务
workScheduler.stopWork(this.myWorkInfo);
this.message = `stopWork 成功`;
} catch (error) {
let err = error as BusinessError;
this.message =`stopWork 失败, errCode${err.code}, errMessage:${err.message}`;
}
}
build() {
Column({ space: 10 }) {
Button("申请延迟任务").onClick(() => {
this.startWork()
})
Button("取消延迟任务").onClick(() => {
this.stopWork()
})
Text(this.message)
}
}
}
pages\background\MyWorkSchedulerExtensionAbility.ets
import { WorkSchedulerExtensionAbility, workScheduler } from '@kit.BackgroundTasksKit';
import { MyLog } from '../TitleBar';
// 继承 WorkSchedulerExtensionAbility 实现自定义的延迟任务
export default class MyWorkSchedulerExtensionAbility extends WorkSchedulerExtensionAbility {
// 延迟任务开始时的回调
onWorkStart(workInfo: workScheduler.WorkInfo) {
MyLog.d(`onWorkStart: ${JSON.stringify(workInfo)}`);
// 打印 parameters中的参数,如:参数key1
// console.info(`work info parameters: ${JSON.parse(workInfo.parameters?.toString()).key1}`)
}
// 延迟任务结束时的回调
onWorkStop(workInfo: workScheduler.WorkInfo) {
MyLog.d(`onWorkStop: ${JSON.stringify(workInfo)}`);
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
2007-02-21 温故知新ASP.NET 2.0(C#)(6) - Membership&RoleManager(成员资格和角色管理)