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%')
}
}