為盡可能延長 Wear OS 裝置的電池續航力,系統會執行記憶體用量計算作業。根據 Wear OS 應用程式品質指南,採用錶面格式的錶面可用的記憶體容量有所限制,具體取決於手錶目前的狀態:
- 在微光模式中,錶面無法使用超過 10 MB 的記憶體。
- 在互動模式下,錶面無法使用超過 100 MB 的記憶體。
系統計算錶面的記憶體用量
如要在採用錶面格式的錶面中,計算圖片或點陣圖字型占用的大小,系統會完成下列步驟:
- 解壓縮圖片或點陣圖字型。
- 檢查圖片或點陣圖字型,看看是否可以透過下列其中一種方式進行最佳化:
- 已調整大小,配合顯示大小。
- 裁剪以移除完全透明的像素。
- 如果可以不損失忠實度,請將其降採樣為 RGB565。
系統會根據產生的定界框,計算圖片或點陣圖字型的大小 (以位元組為單位),如下所示:
- 針對使用 RGBA8888 的圖片和字型: \( 4 \times width \times height \)
- 針對使用 RGB565 的圖片和字型: \( 2 \times width \times height \)
- 針對使用 ALPHA_8 點陣圖設定的圖片和字型: \( width \times height \)
互動模式
計算互動模式的記憶體用量時,系統會計算下列項目的總和:
- 任何向量字型未處理的大小。
- 系統預設字型的預估使用率。
- 套用任何裁剪、調整大小或重新格式化後,圖片和點陣圖字型的總大小。
設定
針對包含設定的錶面,系統會嘗試計算不同設定中使用的資源總大小。有時,當組合數量非常龐大時,系統會稍微高估在不同設定中同時使用的資源數量。
微光模式和圖層
針對微光模式,系統會假設手錶最多可使用三個全螢幕圖層進行轉譯,其中兩個是完全靜態的圖層:
- 手錶元素下的所有內容。大多數錶面的「主體」都會合成至這個圖層。無論繪製此圖層所使用的圖片數量為何,系統都會將其視為一張全螢幕圖片。
- 任何錶針、數位錶面或小工具,只要是動態算繪的平台繫結。
- 來源 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
存放區中的記憶體用量評估工具。