HarmonyOS 鸿蒙Next后台任务保活

HarmonyOS 鸿蒙Next后台任务保活 应用支持音乐播放和定位导航功能,需要同时在后台保活,有相应的Demo吗?

6 回复
cke_250.png ```

更多关于HarmonyOS 鸿蒙Next后台任务保活的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


长时任务请参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/continuous-task-0000001774280022

import backgroundTaskManager from '@ohos.resourceschedule.backgroundTaskManager';
import { BusinessError } from '@ohos.base';
import wantAgent, { WantAgent } from '@ohos.app.ability.wantAgent';

@Entry
@Component
struct Index {
 @State message: string = 'ContinuousTask';
 // 通过getContext方法,来获取page所在的UIAbility上下文。
 private context: Context = getContext(this);

 startContinuousTask(){
 let wantAgentInfo: wantAgent.WantAgentInfo = {
 // 点击通知后,将要执行的动作列表
 // 添加需要被拉起应用的bundleName和abilityName
 wants: [
 {
 bundleName:"com.example.longtaskdemo",
 abilityName:"com.example.longtaskdemo.EntryAbility"
 }
 ],
 //指定点击通知栏消息后的动作是拉起ability
 actionType: wantAgent.OperationType.START_ABILITY,
 // 使用者自定义的一个私有值
 requestCode: 0,
 // 点击通知后,动作执行属性
 wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG]
 };

 wantAgent.getWantAgent(wantAgentInfo)
 .then((wantAgentObj: WantAgent)=>{
 //backgroundTaskManager.BackgroundMode.AUDIO_PLAYBACK
 //backgroundTaskManager.BackgroundMode.LOCATION
 backgroundTaskManager.startBackgroundRunning(this.context, backgroundTaskManager.BackgroundMode.AUDIO_PLAYBACK,wantAgentObj)
 .then(()=>{
 console.info(`Succeeded in operationing startBackgroundRunning.`);
 })
 .catch((err: BusinessError) => {
 console.error(`Failed to operation startBackgroundRunning. Code is ${err.code}, message is ${err.message}`);
 });
 })
}

stopContinuousTask() {
 backgroundTaskManager.stopBackgroundRunning(this.context).then(() => {
 console.info(`Succeeded in operationing stopBackgroundRunning.`);
 }).catch((err: BusinessError) => {
 console.error(`Failed to operation stopBackgroundRunning. Code is ${err.code}, message is ${err.message}`);
 });
}

build() {
 Row() {
 Column() {
 Text("Index")
 .fontSize(50)
 .fontWeight(FontWeight.Bold)

 Button() {
 Text('申请长时任务').fontSize(25).fontWeight(FontWeight.Bold)
 }
 .type(ButtonType.Capsule)
 .margin({ top: 10 })
 .backgroundColor('#0D9FFB')
 .width(250)
 .height(40)
 .onClick(() => {
 // 通过按钮申请长时任务
 this.startContinuousTask();

 // 此处执行具体的长时任务逻辑,如放音等。
 })

 Button() {
 Text('取消长时任务').fontSize(25).fontWeight(FontWeight.Bold)
 }
 .type(ButtonType.Capsule)
 .margin({ top: 10 })
 .backgroundColor('#0D9FFB')
 .width(250)
 .height(40)
 .onClick(() => {
 // 此处结束具体的长时任务的执行

 // 通过按钮取消长时任务
 this.stopContinuousTask();
 })
 }
 .width('100%')
 }
 .height('100%')
}

项目名称

描述: 这是一个示例项目

状态: 活跃

创建者: 张三

最后更新: 2023-10-01

项目截图

基于AudioRenderer的音频播控和多场景交互-支持后台保活:
https://gitee.com/harmonyos_samples/audio-interaction

但我并没有看到在长时任务里面重新执行播放逻辑,

在HarmonyOS(鸿蒙)系统中,后台任务保活机制旨在优化应用资源管理和用户体验,确保关键服务在后台持续运行。鸿蒙系统通过一系列策略管理后台任务,包括但不限于电量管理、内存管理以及任务优先级调度。

要实现后台任务保活,开发者需遵循鸿蒙系统的后台任务管理原则。具体做法可能包括:

  1. 合理使用前台服务:对于需要长时间运行的任务,可考虑使用前台服务,并明确告知用户服务正在运行的原因,以符合用户预期和系统策略。

  2. 优化任务逻辑:确保后台任务高效执行,避免不必要的资源占用,减少被系统回收的风险。

  3. 使用JobScheduler:对于非即时任务,使用JobScheduler安排任务执行,以适应系统资源状况。

  4. 处理电池优化:确保应用不被电池优化策略过度限制,可通过系统设置或编程接口申请必要的电池使用权限。

请注意,鸿蒙系统对后台任务的管理策略可能随版本更新而调整,开发者应关注官方文档和更新日志,确保应用兼容性和稳定性。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部