优化表盘的内存用量

为了尽可能延长 Wear OS 设备的电池续航时间,系统会执行内存用量计算。根据 [Wear OS 应用质量指南][1]的规定,使用表盘格式的表盘会对可以消耗的内存量设有限制,具体取决于手表的当前状态:

  • 在 [氛围模式][2]下,表盘占用的内存不得超过 10 MB。
  • 在互动模式下,表盘占用的内存不得超过 100 MB。

系统计算表盘的内存用量

如需计算使用表盘格式的表盘中的图片或位图字体占用的大小,系统完成以下步骤:

  1. 解压缩图片或位图字体。
  2. 检查图片或位图字体,看看是否可以通过以下方式之一对其进行优化:
    • 已调整大小以更好地匹配显示屏尺寸。
    • 已剪裁以移除完全透明的像素。
    • 降采样为 [RGB565][3]{: .external}(如果可在不损失保真度的情况下实现)。

根据生成的边界框,系统会按以下方式之一计算图片或位图字体的大小(以字节为单位):

  • 对于使用 [RGBA8888][4]{: .external} 的图片和字体: \( 4 \times width \times height \)
  • 对于使用 RGB565 的图片和字体: \( 2 \times width \times height \)
  • 对于使用 ALPHA_8 位图配置的图片和字体:\( width \times height \)

互动模式

在计算交互模式的内存用量时,系统会计算以下项的总和:

  1. 任何 [矢量字体][5]的未处理大小。
  2. 系统默认字体的估算使用情况。
  3. 应用了任何剪裁、大小调整或格式调整后的图片和位图字体的总大小。

配置

对于包含 [配置][6]的表盘,系统会尝试计算不同配置中使用的资源的总大小。有时,当存在大量组合时,系统会略微高估不同配置中同时使用的资源数量。

氛围模式和图层

对于氛围模式,系统假定手表最多使用三个全屏层来渲染,其中两个是完全静态的:

  1. 手表元素下的所有元素。表盘的“正文”的大部分内容都会合成到此层中。使用多少张图片来绘制此图层无关紧要;系统会将其视为一张全屏图片。
  2. 任何手表指针、数字显示屏或带有动态呈现平台绑定的复杂功能。
  3. 在源 XML 文件中,列在手表指针和复杂功能之后的所有元素。

通常,氛围模式下的大多数内存用量都来自位图字体,尤其是大字体。

减少内存用量的方法

按照本部分中的建议操作,您更有可能创建内存消耗不超出这些限制的表盘。

剪裁位图字体以及调整其大小

剪裁图片和 [BitmapFont][7] 对象,并根据其显示大小调整其大小。

当 Wear OS 绘制表盘时,系统会解压缩所有图片。一幅大部分是空白的全屏图片在磁盘上可能会占用 3 KB 的内存,但如果它显示在 450 x 450 像素的屏幕上,系统会解压缩该图片,从而将该图片在内存中的大小增至 750 KB 或更大。

使用一致的位图字体高度

使用 BitmapFont 时,同一个字符的所有图片都应具有相同的高度。同理,包含字词的所有图片也应具有相同的高度。

在动画中使用一致的帧大小

您应更新图片内的元素,并使其边界框相对于表盘位于相同位置,而不是在表盘上移动图片。例如,如果您想在表盘上为圆形添加动画效果,请考虑更改圆形的颜色,而不是在表盘上滚动圆形。

此方法可减小系统为动画计算的边界框大小。

删除重复的图片

如果您的表盘显示同一张图片的多个副本,请仅将该图片的 1 个副本加载到内存中,并对这张图片进行多次引用。

使用弧形显示进度

如需模拟在 1 分钟后或 1 小时后完成的进度条,请勿使用 60 张单独的图片,请改为创建一个 [Arc][8] 对象,其中包含一个可控制其长度的表达式,如以下代码段所示:

<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][9] 对象使用短划线属性或半透明蒙版图像叠加层。

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

XML 节点按照在源 XML 文件中列出的顺序绘制。通过将手表指针和复杂功能放在文件末尾,系统会从氛围模式内存计算中排除整个层。

评估表盘的内存用量

如需衡量表盘的内存用量,请使用内存占用评估器工具,该工具可在 GitHub 上的 [watchface][10] 仓库中找到。

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