最佳化錶面的記憶體用量

Wear OS 會追蹤記憶體用量,藉此延長電池續航力。根據 Wear OS 應用程式品質指南,採用錶面格式的錶面有記憶體限制:

  • 微光模式:記憶體用量上限為 10 MB。
  • 互動模式:記憶體用量上限為 100 MB。

記憶體用量計算

如要使用錶面格式計算錶面圖片或點陣圖字型使用的記憶體,系統會執行下列操作:

  1. 解壓縮圖片或字型。
  2. 確認是否適用下列最佳化方式:
    • 調整大小,以便更符合螢幕
    • 裁剪透明像素
    • 將取樣值降至 RGB565,且不會影響精確度

根據產生的邊界框,大小會以以下方式計算:

  • 使用 RGBA8888 的圖片和字型:4 x 寬 x 高
  • 使用 RGB565 的圖片和字型:2 x 寬度 x 高度
  • 使用 ALPHA_8 點陣圖設定的圖片和字型:寬度 x 高度

互動模式

為了計算互動模式的記憶體用量,系統會將下列值加總:

  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 存放區中的記憶體用量評估工具。

  • 注意:系統會在 JavaScript 關閉時顯示連結文字
  • Arc
  • Line
  • Rectangle