最佳化錶面的記憶體用量

為盡可能延長 Wear OS 裝置的電池續航力,系統會執行記憶體用量計算。根據 Wear OS 應用程式品質指南,使用錶面格式的錶面可用的記憶體容量設有限制,具體取決於手錶目前的狀態:

  • 微光模式中,錶面無法使用超過 10 MB 的記憶體。
  • 在互動模式下,錶面無法使用超過 100 MB 的記憶體。

系統會計算錶面的記憶體用量

如要在採用錶面格式的錶面中計算圖片或點陣圖字型占用的大小,系統會完成下列步驟:

  1. 解壓縮圖片或點陣圖字型。
  2. 檢查圖片或點陣圖字型,確認是否能以下列其中一種方式最佳化:
    • 調整大小以配合螢幕大小。
    • 裁剪後即可移除完全透明像素。
    • 降級為 RGB565 (如果這個方法不必犧牲保真度也能完成)。

系統會根據產生的定界框,計算圖片或點陣圖字型的大小 (以位元組為單位),以下列其中一個值計算:

  • 若是使用 RGBA8888 的圖片和字型: \( 4 \times width \times height \)
  • 若是使用 RGB565 的圖片和字型: \( 2 \times width \times height \)
  • 若是使用 ALPHA_8 點陣圖設定的圖片和字型: \( width \times height \)

互動模式

計算互動模式的記憶體用量時,系統會計算下列項目的總和:

  1. 未處理的所有向量字型大小。
  2. 系統預設字型的預估用量。
  3. 套用任何裁剪、調整大小或重新格式化後,圖片和點陣圖字型的總大小。

設定

針對含有設定的錶面,系統會嘗試計算不同設定中使用的資源總大小。當組合數量非常龐大時,系統可能會略為高估在不同設定下同時使用的資源數量。

微光模式和圖層

使用微光模式時,系統會假設手錶使用最多三個全螢幕圖層進行算繪,其中兩個是完全靜態的圖層:

  1. 位於手錶元素下方。錶面的大部分「主體」會合成至此層。無論使用多少圖片來繪製這個圖層,系統都會計為一張全螢幕圖片。
  2. 任何使用動態轉譯的手錶指針、數位螢幕或具有平台繫結的小工具。
  3. 所有位於手錶指針後方的元素,以及來源 XML 檔案中的小工具。

微光模式下的記憶體用量大多來自點陣圖字型,尤其是較大字型。

減少記憶體用量的方法

只要按照本節提供的建議操作,就能製作出記憶體用量不超出限制範圍的錶面。

裁剪點陣圖字型及調整大小

裁剪圖片和 BitmapFont 物件,並配合顯示大小調整圖片大小。

Wear OS 繪製錶面時,會解壓縮所有圖片。一張大部分空白的全螢幕圖片在磁碟中可能消耗 3 KB,但如果顯示在 450 像素 x 450 像素的畫面上,系統就會解壓縮圖片,這時記憶體中的圖片大小會增加到 750 KB 以上。

使用一致的點陣圖字型高度

使用 BitmapFont 時,組成單一字元的所有圖片高度都應相同。同樣地,組成字詞的所有圖片高度也應相同。

在動畫中使用一致的影格大小

比起在錶面上移動圖片,請改為更新圖片中的元素,並將定界框保持在與錶面的相同位置上。舉例來說,如果您想在錶面上為圓形建立動畫,請考慮變更圓形顏色,而不是在錶面上滾動圓圈。

這項技巧可減少系統為動畫計算的定界框大小。

刪除重複圖片

如果錶面會顯示同一張圖片的多個副本,請只將該圖片的一個副本載入記憶體,並對該圖片建立多個參照。

使用弧形顯示進度

如要模擬在 1 分鐘或 1 小時後完成的進度列,請勿使用 60 張不同的圖片,而是改為建立 Arc 物件,其中包含可控制其長度的運算式,如以下程式碼片段所示:

<PartDraw angle="0" width="400" height="400" name="ProgressBar"
          pivotX="0.5" pivotY="0.5 x="40" y="40">
    <Arc centerX="200" centerY="200" width="400" height="400"
         startAngle="0" endAngle="360">
        <!-- Completes a "progress loop" every minute. -->
        <Transform target="endAngle"
                   value="0 + (clamp([SECOND], 0, 60) - 0) * 6" />
        <Stroke cap="ROUND" color="#123456" thickness="10" />
    </Arc>
</PartDraw>

如要顯示不連續的線條,例如想呈現復古的數位手錶樣式外觀,請使用 Stroke 物件的 dash 屬性,或重疊的半透明遮罩圖片。

將手錶指針和小工具放在來源檔案結尾

XML 節點會按照在來源 XML 檔案中的顯示順序繪製。當系統在檔案結尾將手錶指針和小工具放入檔案結尾,就能略過整個圖層在微光模式記憶體計算作業中。

評估錶面的記憶體用量

如要評估錶面的記憶體用量,請使用 GitHub 上 watchface 存放區中的記憶體用量評估工具。