最佳化錶面

由於 Wear OS 錶面需要持續運作,因此必須有效利用電力。

請儘可能最佳化錶面的效能。服務不得進行不必要的運算。會播放動畫的錶面必須在能配合通知和系統指標的情況下順暢運作。

基本最佳化

本節將說明改善效率的最佳做法。

錶面顏色和亮度

深色有助於保留智慧手錶的電力。以下是設定錶面背景時推薦考量的事項,以便幫助您最佳化錶面使用電池的方式:

  • 顏色。請您儘可能使用黑色背景。
  • 亮度。如果錶面規定無法使用黑色背景,請儘量把背景顏色的亮度保持在 HSV (色調、飽和度、值) 或 HSB 級數百分之 25 以下。舉例來說,當用 Color 類別設定背景顏色並用 HSV 級數定義顏色時,請把值 (即為亮度設定) 設定為 25 以下。

使用動態功能和手機互動

如果錶面需要用手機進行操作,請勿在錶面非活動時候執行程式碼。如果想讓手機應用程式偵測對應的錶面是否為活動狀態,建議您使用 CapabilityClient API

監控耗電量

開發人員和使用者可以藉由 Wear OS 隨附應用程式查看穿戴式裝置各程序所消耗的電池電量 (請到 Settings (設定) > Watch battery (智慧手錶電池) 查看)。

註冊可偵測加密功能的錶面

Android 7.0 以上版本支援檔案加密功能,並可在使用者啟動並提供加密密碼之前就先執行可偵測加密功能的應用程式。這樣做可以加快從啟動動畫到錶面的轉場時間,最多可加快 30 秒。

如果想加快啟動時間,請在錶面資訊清單中加入 android:directBootAware="true"

注意:請在未採用憑證加密儲存空間的錶面上使用此功能。

動畫最佳做法

本節將說明可協助降低動畫消耗電池程度的最佳做法。

降低動畫的畫面更新率

動畫通常會消耗大量的運算資源及電力。大多數的動畫都可用 30 每秒影格數達到流暢的效果,因此您應該避免讓動畫使用比這更高的畫面更新率。您可以改用動態畫面更新率。詳情請參閱 Canvas 錶面範例

讓 CPU 在每次播放動畫之間休眠

當系統播放動畫和更新錶面少量內容時會喚醒 CPU。您應該讓 CPU 在錶面每次播放動畫之間進行休眠。例如您可以在錶面互動模式時每秒播放短促的動畫,讓 CPU 在下一秒之前休眠。藉由讓 CPU 經常休眠,就算每次休眠時間都很短,也能大幅降低電力消耗。

為了儘可能延長電池續航力,請您少用動畫。就算只是讓冒號閃爍,每次閃爍還是會喚醒 CPU,並對電池續航力產生不良影響。

縮減點陣圖素材資源大小

許多錶面都由背景圖片和其他圖像資源組成,而圖像資源會變形並覆蓋在背景圖片上,例如指針和其他會隨著時間移動的設計元素。這些圖像資源越大,變形就需要消耗更多的運算資源。一般來說,每當系統重新繪製錶面時,這些位於 Render.CanvasRenderer.render() 的圖像元素就會旋轉 (有時則會縮放),請見「繪製錶面」的說明。

圖 1. 藉由裁剪指針移除多餘像素。

為了改善錶面效能:

  • 請勿使用大於實際需求的圖像元素。
  • 移除邊緣多餘的透明像素。

圖 1 左邊範例指針的大小減少 97%。

如果按照本節內容減少點陣圖素材資源的大小,不僅可以改善動畫效能,也有助於節省電力。

合併點陣圖素材資源

如果有經常需要一起繪製的點陣圖,不妨考慮把這些點陣圖合併成一個圖像資源。互動模式的背景圖片和刻度記號通常可以合併成一個資源,避免讓系統每次重新繪製錶面時都必須繪製兩個全螢幕的點陣圖。

在繪製縮放過的點陣圖時停用反鋸齒

使用 Canvas.drawBitmap() 方法在 Canvas 物件上繪製縮放過的點陣圖時,您可以藉由提供 Paint 執行個體進行多種設定。為了提昇效能,請用 setAntiAlias() 方法停用反鋸齒,因為這個選項對點陣圖沒有效果。

圖 2. 停用點陣圖濾鏡 (左) 和啟用濾鏡 (右) 的範例。

使用點陣圖濾鏡

如果您需要在其他元素上繪製點陣圖素材資源,請用 setFilterBitmap() 方法在同一個 Paint 執行個體上啟用點陣圖濾鏡。圖 2. 放大顯示了啟用點陣圖濾鏡前後的指針外觀。

注意:在低位元率的微光模式下,系統無法確實轉譯圖片色彩,因此無法正確處理點陣圖濾鏡。請在使用微光模式時停用點陣圖濾鏡。

把耗費較多資源的操作移出繪圖方法

當系統更新錶面時,會呼叫 Render.CanvasRenderer.render() 方法,因此這個方法內應該只含有更新錶面所必須進行的操作,以便改善效能。

請儘量避免在 Render.CanvasRenderer.render() 方法內進行下列操作:

  • 載入圖像和其他資源。
  • 調整圖像大小。
  • 分配物件。
  • 運算每個影格之間不會改變的結果。

您可以使用 CPU 分析器檢測錶面效能。尤其請特別注意 Render.CanvasRenderer.render() 實作的執行時間是否很短,且每次叫用都能保持相近的時間。詳情請參閱「記錄及檢查方法追蹤記錄」。

WatchFace 範例可以展示設定錶面的最佳做法。