在Harmony操作系统中,为了提升用户体验和系统性能,对后台应用进行了严格的管理。当应用退至后台时,系统会采取进程挂起或终止的措施,以减少资源占用和能耗。但是,为了保证特定功能(如音乐播放、日历提醒等)的正常运作,Harmony提供了规范内受约束的后台任务。本文将重点探讨短时任务和长时任务的使用,包括它们的特点、限制以及如何通过代码实现。

HarmonyOS入门之应用后台管理_后台任务

短时任务:快速响应,高效执行

短时任务适用于那些实时性高、耗时较短的后台操作,比如状态保存。系统允许应用在后台运行一小段时间,但为了平衡资源利用,引入了配额机制和数量限制。

HarmonyOS入门之应用后台管理_后台任务_02

特点与限制
  • 申请时机:必须在应用处于前台或刚退至后台5秒内。
  • 数量限制:一个应用同一时刻最多申请3个短时任务。
  • 配额机制:单日配额默认为10分钟,单次配额最大3分钟,低电量时单次配额缩短至1分钟。
开发实践
import backgroundTaskManager from '@ohos.resourceschedule.backgroundTaskManager';

// 申请短时任务
function requestSuspendDelay(reason) {
  let delayInfo = backgroundTaskManager.requestSuspendDelay(reason, () => {
    console.info('Short task will timeout');
    backgroundTaskManager.cancelSuspendDelay(delayInfo.requestId);
  });
}

// 获取剩余时间
async function getRemainingDelayTime(requestId) {
  let remainingTime = await backgroundTaskManager.getRemainingDelayTime(requestId);
  console.info(`Remaining time for short task: ${remainingTime}`);
}

// 取消短时任务
function cancelSuspendDelay(requestId) {
  backgroundTaskManager.cancelSuspendDelay(requestId);
}
长时任务:保障关键功能,持续服务

长时任务设计用于后台播放音乐、导航等长时间运行且用户可感知的任务。系统通过校验任务类型,确保资源合理分配。

支持的类型
  • 数据传输(DATA_TRANSFER)
  • 音频播放(AUDIO_PLAYBACK)
  • 定位导航(LOCATION)
  • 蓝牙交互(BLUETOOTH_INTERACTION)
  • 多设备互联(MULTI_DEVICE_CONNECTION)
  • 计算任务(TASK_KEEPING)
开发实践
import backgroundTaskManager from '@ohos.resourceschedule.backgroundTaskManager';
import wantAgent, { WantAgent } from '@ohos.app.ability.wantAgent';

// 申请长时任务
function startContinuousTask(context) {
  let wantAgentInfo = {
    wants: [
      { bundleName: "com.example.myapp", abilityName: "com.example.myapp.MainAbility" },
    ],
    operationType: wantAgent.OperationType.START_ABILITY,
    requestCode: 0,
    wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG],
  };

  wantAgent.getWantAgent(wantAgentInfo).then((agent) => {
    backgroundTaskManager.startBackgroundRunning(context, backgroundTaskManager.BackgroundMode.AUDIO_RECORDING, agent);
  });
}

// 取消长时任务
function stopContinuousTask(context) {
  backgroundTaskManager.stopBackgroundRunning(context);
}
总结

合理使用后台任务不仅能够提升应用的功能性和用户体验,还能确保系统资源的高效利用。遵循Harmony的规范,开发者可以构建出既智能又节能的应用程序。掌握短时任务和长时任务的开发技巧,将为您的应用带来显著的性能提升和更广泛的用户基础。


以上代码示例仅为指导性质,实际应用中请参照Harmony官方文档进行详细配置和测试。