DEV Community

SameX
SameX

Posted on

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

本文旨在深入探讨华为鸿蒙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 的强大后台任务管理能力实现了多场景下的提醒功能,同时兼顾了用户体验和系统资源使用效率。

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay