讓裝置保持喚醒狀態

當使用者讓 Android 裝置處於閒置狀態時,裝置會迅速進入休眠狀態,以免耗盡電池電量。不過,有時應用程式需要防止 CPU 進入暫停狀態。在某些情況下,應用程式可能需要在運作時保持螢幕開啟。在其他情況下,應用程式不需要保持螢幕開啟,但仍需要 CPU 處於運作狀態。

您採用的方法取決於應用程式的需求。不過,一般來說,您應盡可能採用最輕量的方法,盡量減少應用程式對系統資源的影響。本文件可協助您選擇適合自身情況的 Android 技術。

選擇合適的技術

最適合讓裝置保持喚醒狀態的做法,取決於應用程式的需求。本節將說明如何選擇合適的方法。

流程圖總結了如何選擇正確的方法,讓裝置保持啟用狀態。以下文字會進一步說明流程圖的內容。

  • 您的應用程式是否需要保持螢幕開啟?
    • 如果答案為「是」,請參閱「讓螢幕保持開啟」一文。您可能會找到可滿足需求的特殊用途 API;舉例來說,如果您要實作電話通話 UI,可以使用 Android 電信框架,在需要時保持螢幕開啟。如果沒有適用於您情況的特殊用途 API,您可以使用 keepScreenOn API。
  • 您的應用程式是否正在執行前景服務,且需要在服務執行時,在螢幕關閉時保持裝置喚醒狀態?
    • 如果是「否」,您就不需要讓裝置保持喚醒狀態。如果使用者正在積極與應用程式互動,裝置會保持喚醒狀態。如果使用者未與應用程式互動,且您未執行前景服務,則應視需要讓裝置進入休眠模式。如果您只需要確保在使用者離開應用程式時完成某些工作,請參閱背景工作說明文件,找出最佳選項。
    • 如果是「是」,請先確認您確實需要使用前景服務。視情況而定,您可能需要使用一些特殊用途 API 來滿足需求,而非前景服務。如要瞭解這些資訊,請參閱前景服務說明文件。舉例來說,如果您需要追蹤使用者的所在位置,可以使用地理柵欄 API,而非 location 前景服務。
  • 如果在前景服務執行中且裝置螢幕關閉時,裝置會暫停,這是否會影響使用者體驗?(舉例來說,如果您使用前景服務更新通知,即使裝置處於暫停狀態,也不會造成不好的使用者體驗)。
    • 如果是「否」,請勿使用喚醒鎖定。使用者與裝置互動後,系統會自動恢復動作,將其從暫停狀態移除。
    • 如果答案為「是」,您可能需要使用喚醒鎖定。不過,您仍應檢查是否已使用 API,或執行可代表您宣告喚醒鎖的動作,如「讓裝置保持喚醒的動作」一節所述。

讓裝置保持喚醒狀態的動作

如果應用程式執行下列任一操作,您就不需要自行設定喚醒鎖定。下列動作和 API 都能讓裝置保持喚醒狀態。

  • 如果您正在播放音訊,音訊系統會為您設定及管理喚醒鎖定,您不必自行執行。
  • 如果您使用任務排程 API 或程式庫 (例如 WorkManagerJobSchedulerDownloadManager),系統或程式庫會代您取得喚醒鎖定。
  • 如果您使用的是 Media3 ExoPlayer,可以使用 ExoPlayer.setWakeMode() 讓播放器為您設定喚醒鎖定。
  • 某些裝置感應器是喚醒感應器,您可以使用 SensorManager 讓這些感應器在有資料可回報時喚醒裝置。如要檢查感應器是否為喚醒感應器,請呼叫 Sensor.isWakeUpSensor

另請參閱