喚醒是 AlarmManager
API 的其中一種機制,可以讓開發人員設定鬧鐘,並在特定時間喚醒裝置。應用程式可以藉由在 AlarmManager
使用 RTC_WAKEUP
或 ELAPSED_REALTIME_WAKEUP
標記呼叫 set()
方法,藉此設定喚醒鬧鐘。觸發喚醒鬧鐘時,裝置會退出低電力模式,並保留部分 Wake Lock,同時執行鬧鐘的 onReceive()
或 onAlarm()
方法。如果喚醒鬧鐘的觸發次數過多,可能就會用光裝置電池電力。
為了幫助您改善應用程式品質,Android 會自動監控應用程式是否有喚醒鬧鐘次數過多的問題,並在 Android Vitals 顯示資訊。如要瞭解資料的收集方式,請參閱 Play 管理中心文件。
如果應用程式喚醒裝置的次數過多,您可以利用本頁的指南診斷並修正問題。
修正問題
AlarmManager
是
但隨著時間推移,Android 平台
先前需要的案件
AlarmManager
現已
也因為新功能的提供成效更好
WorkManager。
本章節會說明減少喚醒鬧鐘的訣竅,不過長遠來看,還是建議您遷移應用程式,以便使用「最佳做法」章節所推薦的做法。
請找出您在應用程式的哪些位置排定了喚醒鬧鐘,然後減少這些鬧鐘觸發的頻率。以下提供幾項訣竅:
在
AlarmManager
裡尋找多種set()
方法的呼叫,包括RTC_WAKEUP
或ELAPSED_REALTIME_WAKEUP
標記。建議您在鬧鐘的標記名稱中加入封包、類別或方法名稱,這樣就能輕鬆在原始碼裡找到設定鬧鐘的位置。以下提供幾項額外的訣竅:
- 請勿在名稱裡面加入任何個人識別資訊 (PII),例如電子郵件地址。否則裝置便會記錄
_UNKNOWN
,而不是鬧鐘名稱。 - 請勿藉由程式輔助方式產生類別或方法名稱,例如藉由呼叫
getName()
產生名稱等,因為 Proguard 可能會進行模糊處理。請改用硬式編碼字串。 - 請勿在鬧鐘標記裡加上計數器或專用 ID,因為用這種方式設定的鬧鐘都有專用 ID,會造成系統無法彙整。
- 請勿在名稱裡面加入任何個人識別資訊 (PII),例如電子郵件地址。否則裝置便會記錄
修正問題後,請執行以下 ADB 指令,確認喚醒鬧鐘正常運作:
adb shell dumpsys alarm
這個指令可以提供裝置鬧鐘系統服務的狀態資訊。詳情請參閱 dumpsys。
最佳做法
只有在應用程式需要執行面向使用者的操作時 (例如發布通知或傳送快訊給使用者),才使用喚醒鬧鐘。如需 AlarmManager 的最佳做法清單,請參閱「設定鬧鐘」。
請勿使用 AlarmManager
安排背景工作時程,特別是重複性質和網路背景工作。相反地,請使用具有以下優點的 WorkManager 安排背景工作時程:
- 批次 - 整合工作並減少電池消耗量。
- 持續 - 如果裝置重新啟動,已排定的 WorkManager 工作會在重新啟動完成後執行。
- 條件 - 可以根據條件 (例如裝置是否在充電,或是否可以使用 Wi-Fi) 執行工作
詳情請參閱背景處理作業指南。
請勿使用 AlarmManager
安排只在應用程式執行期間才有效的計時作業。換句話說,在使用者退出應用程式後,就應取消計時作業。在這種情況下請使用 Handler
類別,這種類別比較容易使用,也更有效率。
為您推薦
- 注意:系統會在 JavaScript 關閉時顯示連結文字
- 部分 Wake Lock 停滯
- ANR