當使用者讓 Android 裝置處於閒置狀態時,裝置會迅速進入休眠狀態,以免耗盡電池電量。不過,有時應用程式需要防止 CPU 進入暫停狀態。在某些情況下,應用程式可能需要在運作時保持螢幕開啟。在其他情況下,應用程式不需要保持螢幕開啟,但仍需要 CPU 處於運作狀態。
您採用的方法取決於應用程式的需求。不過,一般來說,您應盡可能採用最輕量的方法,盡量減少應用程式對系統資源的影響。本文件可協助您選擇適合自身情況的 Android 技術。
選擇合適的技術
最適合讓裝置保持喚醒狀態的做法,取決於應用程式的需求。本節將說明如何選擇合適的方法。
- 您的應用程式是否需要保持螢幕開啟?
- 如果答案為「是」,請參閱「讓螢幕保持開啟」一文。您可能會找到可滿足需求的特殊用途 API;舉例來說,如果您要實作電話通話 UI,可以使用 Android 電信框架,在需要時保持螢幕開啟。如果沒有適用於您情況的特殊用途 API,您可以使用
keepScreenOn
API。
- 如果答案為「是」,請參閱「讓螢幕保持開啟」一文。您可能會找到可滿足需求的特殊用途 API;舉例來說,如果您要實作電話通話 UI,可以使用 Android 電信框架,在需要時保持螢幕開啟。如果沒有適用於您情況的特殊用途 API,您可以使用
- 您的應用程式是否正在執行前景服務,且需要在服務執行時,在螢幕關閉時保持裝置喚醒狀態?
- 如果在前景服務執行中且裝置螢幕關閉時,裝置會暫停,這是否會影響使用者體驗?(舉例來說,如果您使用前景服務更新通知,即使裝置處於暫停狀態,也不會造成不好的使用者體驗)。
- 如果是「否」,請勿使用喚醒鎖定。使用者與裝置互動後,系統會自動恢復動作,將其從暫停狀態移除。
- 如果答案為「是」,您可能需要使用喚醒鎖定。不過,您仍應檢查是否已使用 API,或執行可代表您宣告喚醒鎖的動作,如「讓裝置保持喚醒的動作」一節所述。
讓裝置保持喚醒狀態的動作
如果應用程式執行下列任一操作,您就不需要自行設定喚醒鎖定。下列動作和 API 都能讓裝置保持喚醒狀態。
- 如果您正在播放音訊,音訊系統會為您設定及管理喚醒鎖定,您不必自行執行。
- 如果您使用任務排程 API 或程式庫 (例如 WorkManager、
JobScheduler
或DownloadManager
),系統或程式庫會代您取得喚醒鎖定。 - 如果您使用的是 Media3 ExoPlayer,可以使用
ExoPlayer.setWakeMode()
讓播放器為您設定喚醒鎖定。 - 某些裝置感應器是喚醒感應器,您可以使用
SensorManager
讓這些感應器在有資料可回報時喚醒裝置。如要檢查感應器是否為喚醒感應器,請呼叫Sensor.isWakeUpSensor
。