【鸿蒙开发】后台任务

1. 功能介绍

设备返回主界面、锁屏、应用切换等操作会使应用退至后台。

2. 后台任务类型

OpenHarmony标准系统支持规范内受约束的后台任务,包括短时任务、长时任务、延迟任务、代理提醒和能效资源。

开发者可以根据如下功能介绍,选择合适的后台任务以满足应用退至后台后继续运行的需求。

  • 短时任务:适用于实时性要求高、耗时不长的任务,例如状态保存。
  • 长时任务:适用于长时间运行在后台、用户可感知的任务,例如后台播放音乐、导航、设备连接等,使用长时任务避免应用进程被挂起。
  • 延迟任务:对于实时性要求不高、可延迟执行的任务,系统提供了延迟任务,即满足条件的应用退至后台后被放入执行队列,系统会根据内存、功耗等统一调度。
  • 代理提醒:代理提醒是指应用退后台或进程终止后,系统会代理应用做相应的提醒。适用于定时提醒类业务,当前支持的提醒类型包括倒计时、日历和闹钟三类。

使用这些功能需要授权 ohos.permission.PUBLISH_AGENT_REMINDER 权限。 

3. 代理提醒

3.1 功能介绍

应用退到后台或进程终止后,仍然有一些提醒用户的定时类任务,例如购物类应用抢购提醒等,为满足此类功能场景,系统提供了代理提醒(reminderAgentManager)的能力。当应用退至后台或进程终止后,系统会代理应用做相应的提醒。当前支持的提醒类型包括:倒计时、日历和闹钟。

  • 倒计时类:基于倒计时的提醒功能。

  • 日历类:基于日历的提醒功能。

  • 闹钟类:基于时钟的提醒功能。

3.2 闹钟提醒

import reminderAgentManager from '@ohos.reminderAgentManager'
import promptAction from '@ohos.promptAction'

@Entry
@Component
struct Index {
  @State reminderId: number = 0
  @State hour: number = 0
  @State minute: number = 0

  build() {
    Row() {
      Column({ space: 5 }) {
        Button("开启闹铃").onClick(async () => {
          const reminderReq: reminderAgentManager.ReminderRequestAlarm = {
            reminderType: reminderAgentManager.ReminderType.REMINDER_TYPE_ALARM, // 提醒类型为闹钟类型
            hour: this.hour,
            minute: this.minute,
            daysOfWeek: [], // 0-6 指明每周哪几天需要重复提醒  不写就是仅限今天
            ringDuration: 60, // 响铃的时长单位秒
            actionButton: [ // 设置弹出的提醒通知信息上显示的按钮类型和标题
              {
                title: "关闭",
                type: reminderAgentManager.ActionButtonType.ACTION_BUTTON_TYPE_CLOSE
              },
              {
                title: "延迟",
                type: reminderAgentManager.ActionButtonType.ACTION_BUTTON_TYPE_SNOOZE
              }
            ],
            wantAgent: { // 点击提醒通知后跳转的目标UIAbility信息
              pkgName: "com.example.myapplication",
              abilityName: "EntryAbility"
            },
            snoozeTimes: 2, // 指明延迟提醒次数
            timeInterval: 60 // 执行延迟提醒间隔(单位:秒)
          }
          this.reminderId = await reminderAgentManager.publishReminder(reminderReq)
          promptAction.showToast({ message: '添加闹铃成功' })
        })

        Button("关闭闹铃").onClick(() => {
          reminderAgentManager.cancelReminder(this.reminderId)
          promptAction.showToast({ message: '关闭闹铃成功' })
        })

        Text(`${this.hour}:${this.minute}`)

        TimePicker({
          selected: new Date()
        }).onChange((e) => {
          this.hour = e.hour
          this.minute = e.minute
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值