智能提醒助手——基于HarmonyOS Next的多场景后台任务实现

SameX - Nov 2 - - Dev Community

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。

主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。

本文为原创内容,任何形式的转载必须注明出处及原作者。

一、项目背景与需求分析

智能提醒助手是一款面向多种提醒场景的应用程序,用于在锁屏或后台状态下可靠地提醒用户各类事件。典型场景包括:

  • 日历事件提醒:用于提醒用户重要的日程安排
  • 倒计时提醒:用户可自定义倒计时进行特定提醒
  • 智能闹钟:在指定时间自动触发的闹钟功能

为保证应用在后台运行时的稳定性与节能效果,我们将结合 HarmonyOS Next 的 代理提醒延迟任务 来实现各类提醒的后台调度。

二、技术需求与挑战

为了保证提醒助手的用户体验和系统资源利用率,我们在实现中需要解决以下技术挑战:

  1. 多种提醒类型的管理:需要支持日历提醒、倒计时和闹钟,并能在后台进行任务管理。
  2. 系统资源受限时的优化:当系统资源受限或内存不足时,能够根据用户习惯对提醒任务进行调度优化,减少对设备电量和性能的影响。

三、设计思路

1. 任务分解:按不同提醒类型划分模块

智能提醒助手将根据提醒类型分解为以下几个模块:

  • 日历提醒模块:基于用户日程安排,触发并展示提醒通知。
  • 倒计时提醒模块:在倒计时结束时触发提醒,并通过通知显示。
  • 智能闹钟模块:在设定的时间点触发闹钟提醒。

每个模块均会使用 代理提醒 提供的提醒功能,以在锁屏或后台状态下保持稳定的提醒通知。

2. 后台任务类型选择

根据 HarmonyOS Next 后台任务管理的特性,我们将使用以下任务类型:

  • 代理提醒:代理提醒具备系统代理提醒能力,适用于倒计时、日历和闹钟提醒场景。通过设置不同的 ReminderRequest 实例类型,我们可以灵活实现各类提醒功能。
  • 延迟任务:对于不需要立即触发的提醒任务(如定期日程更新),可使用延迟任务,以减少资源占用。

3. 系统资源优化:利用 NotificationSlot 优化通知体验

代理提醒不仅在锁屏和后台时提供通知功能,还支持多种通知配置。通过配置 NotificationSlot,可以在提醒通知中加入自定义按钮、闹钟音量、振动等效果,同时根据系统资源情况动态调度任务的频率,优化提醒体验。

四、关键技术实现

1. 各提醒类型的代理提醒实现及参数配置

在代理提醒中,根据提醒类型的不同需求,我们将分别创建倒计时、日历和闹钟类型的 ReminderRequest 实例。以下为各提醒类型的参数配置:

提醒类型 配置参数 说明
倒计时提醒 triggerTimeInSeconds 触发时间(秒)
日历提醒 dateTime 触发日期和时间
闹钟提醒 hour, minute, daysOfWeek 触发时间和重复周期

代码示例:倒计时提醒的实现

import { reminderAgentManager } from '@kit.BackgroundTasksKit';

// 定义倒计时提醒实例
let countdownReminder = {
    reminderType: reminderAgentManager.ReminderType.REMINDER_TYPE_TIMER,
    triggerTimeInSeconds: 300,  // 5分钟倒计时
    title: '倒计时提醒',
    content: '时间到了!',
    expiredContent: '提醒已过期',
    notificationId: 101,
    actionButton: [
        { title: '关闭', type: reminderAgentManager.ActionButtonType.ACTION_BUTTON_TYPE_CLOSE }
    ],
    wantAgent: {
        pkgName: 'com.example.app',
        abilityName: 'MainAbility'
    }
};

// 发布倒计时提醒
reminderAgentManager.publishReminder(countdownReminder)
    .then(res => console.info(`倒计时提醒发布成功,ID: ${res}`))
    .catch(err => console.error(`倒计时提醒发布失败,错误码: ${err.code}, 信息: ${err.message}`));
Enter fullscreen mode Exit fullscreen mode

代码示例:日历提醒的实现

import { reminderAgentManager } from '@kit.BackgroundTasksKit';

// 定义日历提醒实例
let calendarReminder = {
    reminderType: reminderAgentManager.ReminderType.REMINDER_TYPE_CALENDAR,
    dateTime: { year: 2024, month: 11, day: 30, hour: 9, minute: 0, second: 0 },
    title: '会议提醒',
    content: '您有一场会议即将开始',
    expiredContent: '会议提醒已过期',
    notificationId: 102,
    actionButton: [
        { title: '关闭', type: reminderAgentManager.ActionButtonType.ACTION_BUTTON_TYPE_CLOSE }
    ]
};

// 发布日历提醒
reminderAgentManager.publishReminder(calendarReminder)
    .then(res => console.info(`日历提醒发布成功,ID: ${res}`))
    .catch(err => console.error(`日历提醒发布失败,错误码: ${err.code}, 信息: ${err.message}`));
Enter fullscreen mode Exit fullscreen mode

2. 系统资源优化:提醒任务频率的分组管理

在后台任务频率控制方面,HarmonyOS Next 根据应用的使用频率将任务分为不同活跃分组。例如,在“常用”分组下,提醒任务的最小间隔为2小时,而在“极少使用”分组下则为48小时。针对每类提醒,我们可以利用此策略进行频率控制,减少资源消耗。

活跃分组 最小间隔时间
活跃分组 2小时
经常使用 4小时
常用使用 24小时
极少使用 48小时

五、总结与扩展

通过上述设计与实现,我们构建了一个具备倒计时、日历事件和闹钟提醒等多场景提醒功能的智能助手,并在资源优化和后台任务调度方面保证了系统的稳定性和节能效果。未来可考虑进一步扩展功能:

  1. 延展更多提醒类型:例如天气提醒、新闻提醒等,通过代理提醒灵活支持更多智能场景。
  2. 优化提醒频率:动态分析用户使用习惯,根据不同的活跃分组调整提醒任务的触发频率,进一步提升系统资源管理效率。

此智能提醒助手通过 HarmonyOS Next 的强大后台任务管理能力实现了多场景下的提醒功能,同时兼顾了用户体验和系统资源使用效率。

. . . . . . . . . . . . . . . . . . . . . . . . . . . .