
回复
兄弟们,在HarmonyOS Next开发里,后台任务就像应用的"幕后帮手"。有些活儿得在后台默默干,比如保存数据、下载文件。今天咱就唠唠最基础的两种后台任务——短时任务和长时任务,搞懂它们,开发后台功能就稳了!
适合那些耗时短、实时性要求高的活儿,比如:
举个栗子,用户切出咱们的笔记App,这时就得用短时任务赶紧保存当前笔记内容,防止数据丢失。
onBackground
回调里申请,后台运行时突然申请?门儿都没有!import { backgroundTaskManager } from '@ohos.backgroundTask';
// 申请短时任务
function requestShortTask() {
const reason = '保存用户笔记'; // 写清楚为啥申请
const task = backgroundTaskManager.requestSuspendDelay(reason, () => {
console.log('任务快超时了,赶紧收尾!');
backgroundTaskManager.cancelSuspendDelay(task.requestId); // 主动取消任务
});
}
// 查看剩余额度
function checkRemainingTime() {
backgroundTaskManager.getRemainingDelayTime(task.requestId)
.then((seconds) => {
console.log(`还剩 ${seconds} 秒额度`);
})
.catch((err) => {
console.error(`查询失败:${err.message}`);
});
}
适合需要长时间运行的任务,比如:
像音乐App切到后台还能继续播放,靠的就是长时任务撑场子。
ContinuousTaskExtensionAbility
,实现onContinuousTaskStart
和onContinuousTaskStop
回调backgroundTaskManager.startContinuousTask
发起任务import { ContinuousTaskExtensionAbility, backgroundTaskManager } from '@ohos.backgroundTask';
export default class MusicTaskAbility extends ContinuousTaskExtensionAbility {
onContinuousTaskStart(workInfo) {
console.log(`音乐播放任务启动,任务信息:${JSON.stringify(workInfo)}`);
// 开始播放音乐逻辑
startMusicPlayer();
}
onContinuousTaskStop(workInfo) {
console.log(`音乐播放任务停止,任务信息:${JSON.stringify(workInfo)}`);
// 停止播放逻辑
stopMusicPlayer();
}
}
系统可不允许长时任务无限期占用资源,得设置超时时间:
onContinuousTaskStart(workInfo) {
console.log('长时任务启动');
// 设置5分钟超时
setTimeout(() => {
console.log('任务超时,强制停止');
backgroundTaskManager.stopContinuousTask(this.continuousTaskId);
}, 5 * 60 * 1000);
}
getRemainingDelayTime
查额度cancelSuspendDelay
onContinuousTaskStart
里写超时逻辑开发时先想清楚需求:是保存个数据?还是持续播放音乐?选对任务类型,再结合系统规则写代码。下次遇到后台任务开发,按照这个思路来,准能少走弯路! 有啥问题,评论区唠唠~