ウォッチフェイスのメモリ使用量を最適化する

Wear OS では、メモリ使用量をトラッキングすることでバッテリー駆動時間を改善しています。Watch Face Format を使用するウォッチフェイスには、Wear OS アプリの品質に関するガイドラインに記載されているメモリ上限があります。

  • 常に画面表示モード: 最大メモリ使用量 10 MB。
  • インタラクティブ モード: 最大メモリ使用量 100 MB。

メモリ使用量の計算

Watch Face Format を使用してウォッチフェイスの画像またはビットマップ フォントのメモリ使用量を計算するには、システムは次の処理を行います。

  1. 画像またはフォントを解凍します。
  2. 次の最適化が適用されるかどうかを確認します。
    • 画面に合わせてサイズを変更する
    • 透明ピクセルの切り抜き
    • 忠実度を損なうことなく RGB565 にダウンサンプリング

結果の境界ボックスに基づいて、サイズは次のように計算されます。

  • RGBA8888 を使用する画像とフォントの場合: 4 x 幅 x 高さ
  • RGB565 を使用する画像とフォントの場合: 2 x 幅 x 高さ
  • ALPHA_8 ビットマップ構成を使用する画像とフォントの場合: 幅 x 高さ

インタラクティブ モード

インタラクティブ モードのメモリ使用量を計算するために、システムは次の値を合計します。

  1. ベクター フォントの未処理サイズ
  2. システムのデフォルト フォントの推定使用量
  3. 切り抜き、サイズ変更、再フォーマットが適用された後の画像とビットマップ フォントの合計サイズ

設定

構成のあるウォッチフェイスの場合、システムはさまざまな構成にわたるウォッチフェイス リソースの合計サイズを計算しようとします。組み合わせの数が多いと、同時に使用されるリソースの数を過大評価する可能性があります。

アンビエント モードとレイヤ

アンビエント モードでは、最大 3 つの全画面レイヤが使用されることが想定されています。そのうち 2 つは静的です。レイヤには次のものがあります。

  1. ウォッチフェイスの背景。背景が複数の画像で構成されている場合でも、システムはこれを 1 つの画像として扱います。
  2. 針、デジタル ディスプレイ、動的な要素などの可動部品。
  3. ソース XML ファイルの残りの要素。

大きなビットマップ フォントは、アンビエント モードで最も多くのメモリを使用することが多いため、

メモリ使用量を削減する方法

次の最適化を使用して、メモリ使用量を削減します。

ビットマップ フォントの切り抜きとサイズ変更

画像と BitmapFont オブジェクトを切り抜いて、表示サイズに合わせてサイズを変更できます。

Wear OS は、すべての画像を解凍した状態でウォッチフェイスを描画します。ほとんど空白の全画面画像のディスク消費量は 3 KB ですが、450 ピクセル x 450 ピクセルの画面では 750 KB 以上になります。

ビットマップ フォントの高さを一定にする

BitmapFont を使用する場合は、各文字の画像の高さをすべて同じにする必要があります。同様に、単語の画像の高さもすべて同じにする必要があります。

アニメーションで一貫したフレームサイズを使用する

ウォッチフェイス上で画像を移動するのではなく、画像内の要素を更新し、境界ボックスの位置を固定します。たとえば、文字盤上の円をアニメーション化するには、円を回転させるのではなく、色を変更します。

この手法により、アニメーションの計算された境界ボックスのサイズが縮小されます。

画像の重複除去

画像を複数回表示するには、1 つの画像リソースのみを含めて、それを複数回参照します。

進行状況を円弧で表示する

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 オブジェクトのダッシュ プロパティを使用するか、半透明のマスク画像オーバーレイを使用します。

ウォッチフェイスの針とウォッチフェイスの追加機能をソースファイルの末尾に配置する

XML ノードは、ソース XML に記載されている順序で描画されます。ウォッチフェイスの針とウォッチフェイスの追加機能を最後に配置すると、システムはアンビエント モードのメモリ計算からレイヤ全体を除外できます。

ウォッチフェイスのメモリ使用量を評価する

ウォッチフェイスのメモリ使用量を測定するには、GitHub の watchface リポジトリにあるメモリ使用量エバリュエータ ツールを使用します。

  • 注: JavaScript がオフになっている場合はリンクテキストが表示されます
  • Arc
  • LINE
  • Rectangle