
回复
嗨~我是小L!在鸿蒙开发中,延迟任务就像「智能管家」——能根据网络、电量等条件自动触发任务,避免资源浪费。今天教你3招玩转延迟任务调度~
条件类型 | 可选值/范围 | 示例代码 |
---|---|---|
网络类型 | WIFI/CELLULAR/NONE | networkType: NetworkType.WIFI |
电池电量 | 0-100(百分比) | batteryLevel: 30 (低于30%触发) |
充电状态 | WIRELESS/USB/NONE | chargerType: ChargingType.USB |
存储容量 | >1GB/<500MB等 | storageFree: 1024 (单位MB) |
定时任务 | 绝对时间/周期性时间 | triggerAt: 1690000000 (时间戳) |
import { WorkInfo, NetworkType, ChargingType } from '@ohos.workScheduler';
const backupWork: WorkInfo = {
workId: 1001, // 唯一标识
bundleName: 'com.example.backup',
abilityName: 'BackupTaskAbility',
networkType: NetworkType.WIFI, // 仅Wi-Fi环境
chargerType: ChargingType.WIRELESS, // 仅无线充电时
delay: 300, // 条件满足后延迟300秒执行(避免立即抢占资源)
repeatInterval: 86400, // 每天执行一次
};
function scheduleBackup() {
try {
workScheduler.startWork(backupWork);
console.log('备份任务已调度,等待条件触发');
} catch (error) {
if (error.code === 1001) {
console.log('任务已存在,无需重复调度');
}
}
}
export default class BackupTaskAbility {
onStart(workInfo: WorkInfo) {
if (workInfo.workId === 1001) {
this.performBackup(); // 执行备份逻辑
}
}
private async performBackup() {
// 检查网络和充电状态(双重保险)
const isWifi = await checkNetworkType(NetworkType.WIFI);
const isCharging = await checkChargingStatus();
if (isWifi && isCharging) {
await backupToCloud(); // 执行云备份
workScheduler.stopWork(workInfo.workId); // 任务完成,释放资源
}
}
}
应用活跃程度 | 执行频率限制 | 典型场景 |
---|---|---|
活跃 | 至少每2小时一次 | 即时通讯App消息同步 |
常用 | 至少每24小时一次 | 新闻App夜间自动更新 |
极少使用 | 最多每48小时一次 | 低频工具类App数据清理 |
受限 | 禁止执行 | 被用户手动限制的App |
const highPriorityWork: WorkInfo = {
...baseWorkInfo,
priority: WorkPriority.HIGH, // 最高优先级(默认MEDIUM)
overridePolicy: true, // 允许突破分组频率限制
};
batteryLevel: 20
和chargerType: NONE
(充电时不触发)
if (status !== WorkStatus.RUNNING) {
scheduleBackup();
}
stopWork
onStart
中执行耗时操作,改为异步处理
## 总结:延迟任务「三原则」
1. **条件优先**:能用条件触发的任务,绝不后台常驻
2. 2. **频率克制**:根据用户使用习惯设置执行间隔
3. 3. **动态适配**:结合系统资源状态调整任务优先级