節省電力和電池

電源效率在 Wear OS 上尤其重要。Wear OS 設計原則非常重視裝置耗電量,因為手錶是小型裝置,適合短時間互動。

與大型行動裝置相比,Wear OS 裝置的電池較小,因此電池耗電量更明顯。此外,相較於行動裝置,使用者需要花費更多心力為 Wear OS 裝置充電。使用者可以在一天中不同時間為行動裝置充電,但必須先取下 Wear OS 裝置,才能為裝置充電。

如要提升應用程式的電源效率,請遵循下列設計最佳做法:

  • 應用程式設計應充分利用 Wear OS 的板型規格。不應直接複製行動應用程式。
  • 使用現有的行動應用程式,協助處理特定用途。舉例來說,手錶的網際網路和同步處理功能相當耗電,因此請考慮是否可由行動裝置執行繁重工作,再由 Wear OS 裝置接收資料變更。
  • 設計較短的互動用途。
  • 請考量您使用的 Wear OS 事件,以及這些事件發生的頻率。
  • 請盡可能延後應用程式的工作,直到手錶充電為止。 這點在處理資料密集型工作時尤其重要,例如同步資料和整理資料庫。

    如果裝置正在充電且已連上 Wi-Fi 連線,請排定工作,預先擷取使用者可能想在應用程式中查看的資料、圖片和更新。

本電源指南可協助您瞭解系統執行應用程式的時機和方式,以及如何限制應用程式的執行階段和電池耗電量。如要進一步瞭解如何執行特定動作 (例如載入應用程式或捲動清單),請參閱效能相關指南,例如 Compose on Wear OS 效能指南。

監控一段時間內的電池用量

如要分析執行應用程式的 Wear OS 裝置電池統計資料,請在開發機器的終端機視窗中輸入下列指令:

adb shell dumpsys batterystats

GitHub 上的程式庫提供電池統計資料剖析器,可與這個指令一併執行。

影響電池續航力的事件

在考慮應用程式之前,建議您先從更廣泛的角度思考 Wear OS 裝置上會消耗電力的事件。

下表顯示 Wear OS 應用程式中幾個常見事件對電池續航力的相對影響。實際耗電量因裝置而異。

事件 對電池續航力的影響 緩解方式
存取網路,包括 LTE 和 Wi-Fi 非常高 延後非必要的網路存取,直到裝置充電為止。
開啟螢幕並啟動互動模式 高 請勿鼓勵使用者讓螢幕保持開啟狀態的時間超過必要長度。提供使用「持續待機模式」(又稱微光模式) 的體驗。
存取 GPS 感應器 高 如果可以,請等到使用者要求 GPS 存取權。
維持高 CPU 使用率 高 使用 Jetpack Compose 使用流程。
存取心率感應器 中 從感應器 API 接收回呼時,請使用處理器的喚醒時間,例如在 Wear OS 上使用健康照護服務時。
透過藍牙存取其他裝置 中 縮短練習時間。
保留 Wake Lock 中 減少手動建立喚醒鎖,並使用 WorkManager。

縮短螢幕開啟時間

在 Wear OS 應用程式中,請遵循下列螢幕使用原則:

  • 螢幕開啟鎖定:請盡可能避免。如要測試,請在系統設定中關閉「Always-on display」,並觀察螢幕是否會在逾時期間內關閉。
  • 動畫:盡量減少複雜的動畫,改用簡短的轉場效果,讓畫面看起來更專業。特別是避免長時間執行的動畫和迴圈。如需循環播放,請在循環之間加入暫停時間,長度至少與動畫本身相同。
  • 微光模式下的喚醒時間:視需要支援螢幕長亮功能,例如健身用途。如果應用程式需要全天候運作,請遵循微光模式建議。

盡量減少 CPU 使用量

在 Wear OS 應用程式中,請遵守下列 CPU 用量原則:

  • 保持簡短。
  • 批次處理任何相關作業,盡可能延長應用程式程序的閒置時間。

盡量減少喚醒鎖定

在多數情況下,請避免任何會阻止應用程式進入休眠狀態的操作,例如WakeLock。舉例來說,在健康與運動應用程式中,長時間執行的運動不需要 WakeLock。從感應器 API 接收回呼時,請使用處理器的喚醒時間,例如在 Wear OS 上使用健康照護服務時。

在某些情況下,您可以取得 WakeLock,例如應用程式執行下列任一操作時:

  • 在背景播放媒體。
  • 使用 WorkManager 或 JobScheduler。(在背景執行工作時,系統會代表您保留 WakeLock)。

如要在本機偵錯 Wake Lock,請使用 Android Studio 的背景工作檢查器、系統追蹤或 adb shell dumpsys batterystats,檢查個別發生長時間 Wake Lock 的情況,以及 Wake Lock 總數和持續時間的摘要。比較應用程式持有的喚醒鎖定數量和持續時間,以及應用程式的互動式使用模式:

  • 檢查是否有非預期的 WakeLock。
  • 如果時間長度超過預期,請考慮工作是否因某些依附元件 (例如網路可用性) 而遭到封鎖。

檢查應用程式如何進入閒置狀態

請考量發生重要裝置事件時,使用中的應用程式會執行哪些動作,例如:

  • 螢幕會關閉,裝置進入微光模式。
  • 應用程式透過滑動關閉。

如要分析應用程式活動,請使用下列各節中顯示的工具。

電源分析器

在 Android Studio 選單中,依序選取「View」>「工具視窗」>「Profiler」,即可存取電源分析器:

  1. 檢查系統追蹤記錄,瞭解螢幕關閉和裝置進入微光模式的過程。
  2. 查看是否有工作仍在進行,以及裝置的 CPU 使用率。

Perfetto

Perfetto 可讓您記錄追蹤,然後檢查應用程式,查看螢幕關閉、裝置進入微光模式或使用者關閉應用程式活動時,是否有任何執行緒正在執行任何工作。

定義自訂事件,標示應用程式的重要事件,包括特定領域事件。以媒體應用程式來說,這類工作包括擷取播放清單、下載特定媒體項目、開始播放和停止播放。定義這些事件後,您就能在 Perfetto 中查看這些事件,並比較事件時間與應用程式的 CPU 和耗電量。

您也可以使用 Android CLI 安裝 android-profiler 技能 (android skills add android-profiler),讓 AI 代理程式從指令列記錄 Perfetto 系統追蹤記錄,並分析電源軌、喚醒鎖定和裝置暫停狀態。

分析應用程式的排定工作

使用 WorkManager 排定的工作可讓您在應用程式中執行背景工作。雖然部分背景工作必須定期執行,但請勿過於頻繁或長時間執行工作,因為這可能會耗盡裝置電池電力。

使用 Android Studio 的背景工作檢查器 (依序點選「View」>「工具視窗」>「App Inspection」),或執行 adb shell dumpsys jobscheduler 和 adb shell dumpsys batterystats,檢查已排定的工作和 worker 的執行作業情況。查看執行頻率和總時間長度:

  • 如果工作執行頻率很高,建議降低頻率。
  • 確認總執行時間符合預期,且不會明顯延長。

您也可以記錄系統追蹤,將工作執行與應用程式在時間軸上的活動建立關聯。請把握以下幾項重點:

  • 對應用程式而言,執行時間應合理。
  • 請考量工作是否在應用程式執行時發生,或工作是否代表週期性背景工作。

感應器

Wear OS 裝置有許多不同的感應器,例如 GPS。在多數情況下,請使用 Wear OS 的健康照護服務,而非直接與 SensorManager 互動。在許多情況下,健康照護服務會以智慧方式批次處理資料,提升電池效能。

如要分析應用程式的感應器用量,請在開發機器的終端機視窗中執行下列指令:

adb shell dumpsys sensorservice

這項指令的結果會顯示下列資訊:

  • 目前和先前的感應器註冊。
  • 感應器設定,包括批次處理 (如有設定)。
  • 最近的樣本資料。

測試感應器取消註冊

如要確認應用程式是否如預期停止擷取感應器資料,請測試下列情境:

  1. 滑動關閉應用程式。
  2. 用手掌輕觸螢幕。這項操作會關閉螢幕或將螢幕設為微光模式。

使用上一節的 ADB 指令,檢查感應器是否正確顯示為未註冊。

資料層

使用 Data Layer API 時,每次傳輸都會耗用部分電量。特別是,如果您使用這個 API 傳送資料,應用程式必須喚醒才能接收資料。基於上述原因,請謹慎使用這個 API。

使用 Data Layer API 的其他最佳做法包括:

  • 請等到應用程式啟用後,再使用 WearableListenerService 設定事件監聽器。
  • 請勿使用 Data Layer API 定期對手錶執行 Ping 作業,檢查隨附裝置或應用程式是否可用。如果應用程式重複傳送訊息,就會喚醒無線電和遠端應用程式程序,導致裝置電池不必要地耗電。請改用 CapabilityClient 偵測裝置可用性和功能,或只在狀態變更時傳送訊息。
  • 傳輸狀態變更,而非設定快速更新。這些狀態變更可讓 Wear OS 裝置執行本機資料計算,例如健身課程開始時。

    只傳輸會更新 UI 的狀態變更。舉例來說,如果活動畫面只顯示「跑步公里數」到小數點後一位,請勿在使用者每向前移動一公尺時,就向 Wear OS 傳送狀態變更。

如要分析應用程式中的資料層 API 用量,請在開發機器的終端機視窗中執行下列指令:

adb shell dumpsys activity service WearableService

這個指令的結果包括:

  • RpcService:可讓您查看使用 MessageClient 呼叫路徑的頻率和路徑。
  • DataService:可讓您查看使用 DataClient 設定資料項目的頻率。

健康與運動應用程式

如果您維護健康與運動應用程式,請使用健康照護服務,盡量減少應用程式對感應器的使用量。

  • 如要瞭解 ExerciseClient,請使用系統追蹤記錄、Perfetto 或 adb shell dumpsys batterystats,確認微光模式的行為是否正確。確認應用程式不會每隔一兩分鐘就喚醒,以接收 ExerciseUpdate 資料。
  • 如要全天監控一般健康狀況,請使用 PassiveMonitoringClient,詳情請參閱「在背景監控健康與運動資料」指南。

資訊方塊和小工具

如果應用程式支援資訊方塊或小工具,請遵循下列最佳做法:

  • 停用自動重新整理,或將重新整理頻率提高至 2 小時以上。
  • 請使用 Firebase 雲端通訊 (FCM) 或適當排程的工作傳送資料更新。請注意,避免更新頻率過高,否則系統排定重複工作的頻率,可能會高於使用者或平台存取執行該工作所需資料的速度。
  • 使用者未與資訊方塊或複雜功能互動時,請勿安排相關工作。
  • 採用離線優先做法。
  • 在主要應用程式、資訊方塊和小工具之間共用單一資料庫。這也有助於確保各個 UI 介面的資料一致。