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

Wear OS デバイスのバッテリー駆動時間を最大限に延ばすため、 メモリ使用量の計算を実行しますWear OS アプリの品質評価の一環として のガイドラインに沿って、Watch Face Format を使用するウォッチフェイスでは、 消費可能なメモリ量は、ウォッチの現在の状態に応じて以下のように異なります。

  • 常に画面表示モードでのメモリ消費量は 10 MB 以下に制限されます。
  • インタラクティブ モードでのメモリ消費量は 100 MB 以下に制限されます。
で確認できます。

システムがウォッチフェイスのメモリ使用量を計算する

ウォッチフェイスに埋め込まれた画像またはビットマップ フォントの大きさを、 Watch Face Format を使用している場合、次の処理が行われます。

  1. 画像またはビットマップ フォントを解凍します。
  2. 画像またはビットマップ フォントが、次のいずれかで最適化可能かどうかを確認します。 できます。 <ph type="x-smartling-placeholder">
      </ph>
    • 表示サイズに合わせてサイズが変更されました。
    • 完全に透明なピクセルを除去するために切り抜きました。
    • RGB565 にダウンサンプリングする(これを使わずに実行可能) フィデリティの損失が生じます

結果として得られる境界ボックスに基づいて、システムが画像のサイズを またはビットマップ フォント(バイト単位)。次のいずれかになります。

  • RGBA8888 を使用する画像とフォントの場合: \( 4 \times width \times height \)
  • RGB565 を使用する画像とフォントの場合: \( 2 \times width \times height \)
  • ALPHA_8 ビットマップ構成を使用する画像とフォントの場合: \( width \times height \)
で確認できます。

インタラクティブ モード

インタラクティブ モードのメモリ使用量を計算する際、システムは 次の合計:

  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