优化表盘的内存用量

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="25" y="25">
    <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="#654456" thickness="10" />
    </Arc>
</PartDraw>

如需显示不连续的线条(例如为了实现复古的数字手表样式),请为 Stroke 对象使用短划线属性或半透明蒙版图像叠加层。

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

XML 节点会按照源 XML 中列出的顺序绘制。通过将表针和复杂功能放在最后,您可以让系统从环境模式内存计算中消除整个层。

评估表盘的内存用量

如需衡量表盘的内存使用情况,请使用内存占用评估器工具(可在 GitHub 上的 watchface 代码库中获取)。

  • 注意:未启用 JavaScript 时,系统会显示链接文字
  • Arc
  • Line
  • Rectangle