部分 Wake Lock 是 PowerManager
API 中的一項機制,可以讓開發人員在關閉裝置螢幕 (無論是因為系統逾時還是因為使用者按下電源鍵) 之後繼續運行 CPU。應用程式可以使用 PARTIAL_WAKE_LOCK
標記呼叫 acquire()
,獲取部分 Wake Lock。當應用程式在背景執行時 (使用者看不到應用程式的任何部分),如果部分 Wake Lock 保持了較長時間,就會進入「停滯」狀態。這種狀況會阻止裝置進入電量較低的狀態,因此會快速消耗裝置電量。您應只在必要時使用部分 Wake Lock,並於不再需要時立即釋放。
如果應用程式進入部分 Wake Lock 停滯狀態,您可以根據本頁面的指南診斷並修正問題。
偵測問題
您不一定都會發現應用程式有部分 Wake Lock 進入停滯狀態。如果您已發布應用程式,Android Vitals 可協助您注意這個問題。
Android Vitals
Android Vitals 會透過 Play 管理中心在應用程式出現部分 Wake Lock 停滯時發出提醒,藉此改善應用程式效能。如果在一個電池工作階段中,於背景發生至少一次部分 Wake Lock 並持續一小時,Android Vitals 就會報告部分 Wake Lock 停滯問題:
「電池工作階段」的定義按照各平台版本而有不同。
- 在 Android 10 上,電池工作階段是指系統在指定的 24 小時內,根據收到的所有電池報告彙整而成的時間資料。「電池報告」指的是電池兩次充電 (從低於 20% 充至 80% 以上,或是從任意值充至 100%) 之間的間隔時間。
- 在 Android 11 中,電池工作階段固定為 24 小時。
電池工作階段顯示的數值是應用程式所有受測量使用者的總數。如要瞭解 Google Play 如何收集 Android Vitals 資料,請參閱 Play 管理中心說明文件。
發現應用程式有過多停滯的部分 Wake Lock 後,接下來就要解決問題。
修正問題
由於 Wake Lock 可能會耗盡裝置電池電力,因此如果有其他替代方案,請勿使用 Wake Lock。選擇正確的 API 讓裝置保持喚醒狀態說明文件可協助您為應用程式找到最佳解決方案。
如果您確實需要使用喚醒鎖定,請遵循喚醒鎖定的最佳做法,確保喚醒鎖定不會影響裝置效率。特別是,請確保您取得的每部裝置都已釋放,並盡快釋放鎖定裝置。
修正程式碼中的問題後,請使用下列工具,檢查應用程式是否正確釋放 Wake Lock:
dumpsys - 這項工具可提供裝置系統服務的狀態資訊。如果想檢視電源服務狀態和其中包含的 Wake Lock 清單,請執行
adb shell dumpsys power
。Battery Historian - 這項工具可剖析 Android 錯誤報告的輸出結果,並以視覺化方式呈現電源相關事件。
為您推薦
- 注意:系統會在 JavaScript 關閉時顯示連結文字
- 凍結影格
- 在持續整合中執行基準測試
- 不使用 Macrobenchmark 建立及評估基準設定檔