選擇正確的 API,讓裝置保持啟用狀態

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

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

選擇合適的技術

讓裝置保持喚醒狀態的最佳做法取決於應用程式需求。本節將協助您選擇合適的方法。

這張流程圖總結了如何選擇適當做法,讓裝置保持啟用狀態。下文將詳細說明流程圖內容。

  • 應用程式是否需要保持螢幕開啟?
    • 如果選取「是」,請參閱「螢幕長亮模式」。可能會有專用 API 可滿足您的需求;舉例來說,如果您要實作電話通話 UI,可以使用 Android 電信架構,在需要時保持螢幕開啟。如果沒有適合您情況的專用 API,可以使用 keepScreenOn API。
  • 您的應用程式是否正在執行前景服務,且需要在服務執行時,讓裝置在螢幕關閉時保持喚醒狀態?
    • 如果選取「否」,裝置就不需要保持喚醒狀態。如果使用者正在與應用程式互動,裝置會保持喚醒狀態。如果使用者未與應用程式互動,且您未執行前景服務,請視需要讓裝置進入暫停模式。如果您只是想確保使用者離開應用程式時,某些工作能夠順利完成,請參閱背景工作文件,找出最佳做法。
    • 如果,請先確認您是否真的需要使用前景服務。視情況而定,您可以使用某些專用 API 來達成需求,而不必使用前景服務。如要瞭解這些資訊,請參閱前景服務說明文件。舉例來說,如要追蹤使用者位置,您或許可以改用地理圍欄 API,而非 location 前景服務。
  • 如果裝置在前景服務執行期間暫停,且裝置螢幕處於關閉狀態,是否會對使用者體驗造成負面影響?(舉例來說,如果您使用前景服務更新通知,裝置暫停時不會造成不良的使用者體驗)。
    • 如果,請勿使用 Wake Lock。使用者與裝置互動後,裝置會自動恢復動作,並解除暫停狀態。
    • 如果答案是「是」,您可能需要使用 Wake Lock。不過,您仍應檢查是否已使用 API,或是否正在執行會代表您宣告喚醒鎖定的動作,如「讓裝置保持喚醒狀態的動作」一文所述。

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

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

  • 如果您正在播放音訊,音訊系統會為您設定及管理喚醒鎖定,您不必自行操作。
  • 如果您使用工作排程 API 或程式庫 (例如 WorkManagerJobSchedulerDownloadManager),系統或程式庫會取得歸因於您應用程式的喚醒鎖定。
  • 如果使用 Media3 ExoPlayer,可以透過 ExoPlayer.setWakeMode() 讓播放器為您設定喚醒鎖定。
  • 部分裝置感應器是喚醒感應器,您可以使用 SensorManager,讓這些感應器在有資料要回報時喚醒裝置。如要檢查感應器是否為喚醒感應器,請呼叫 Sensor.isWakeUpSensor
  • 如果設定鬧鐘,裝置會在鬧鐘響起時喚醒,即使應用程式未執行也一樣。

另請參閱