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