为您的表盘优化内存使用

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. 应用裁剪、调整大小和重新格式化后,图像和位图字体的总大小

配置

对于包含配置的表盘,系统会尝试计算不同配置下表盘资源的总大小。如果组合数量非常大,系统可能会高估同时使用的资源数量。

微光模式和层

系统假设微光模式最多使用三个全屏层,其中两个是静态的。这些层包括:

  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 对象的虚线属性或半透明遮罩图像叠加。

将表盘指针和复杂功能放置在源文件末尾

XML 节点按照源 XML 中列出的顺序绘制。通过将表盘指针和复杂功能放在末尾,您可以使系统从微光模式内存计算中消除整个层。

评估表盘的内存使用情况

要测量表盘的内存使用量,请使用内存占用评估工具,该工具可在 GitHub 上的 watchface 代码库中找到。