智慧提醒助手——基於HarmonyOS Next的多場景後臺任務實現

SameX發表於2024-10-27

本文旨在深入探討華為鴻蒙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}`));

程式碼示例:日曆提醒的實現

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}`));

2. 系統資源最佳化:提醒任務頻率的分組管理

在後臺任務頻率控制方面,HarmonyOS Next 根據應用的使用頻率將任務分為不同活躍分組。例如,在“常用”分組下,提醒任務的最小間隔為2小時,而在“極少使用”分組下則為48小時。針對每類提醒,我們可以利用此策略進行頻率控制,減少資源消耗。

活躍分組 最小間隔時間
活躍分組 2小時
經常使用 4小時
常用使用 24小時
極少使用 48小時

五、總結與擴充套件

透過上述設計與實現,我們構建了一個具備倒數計時、日曆事件和鬧鐘提醒等多場景提醒功能的智慧助手,並在資源最佳化和後臺任務排程方面保證了系統的穩定性和節能效果。未來可考慮進一步擴充套件功能:

  1. 延展更多提醒型別:例如天氣提醒、新聞提醒等,透過代理提醒靈活支援更多智慧場景。
  2. 最佳化提醒頻率:動態分析使用者使用習慣,根據不同的活躍分組調整提醒任務的觸發頻率,進一步提升系統資源管理效率。

此智慧提醒助手透過 HarmonyOS Next 的強大後臺任務管理能力實現了多場景下的提醒功能,同時兼顧了使用者體驗和系統資源使用效率。

相關文章