Wear OS 通过跟踪内存使用情况来提高电池续航时间。使用 Watch Face Format 的表盘有内存限制,具体参见 Wear OS 应用质量指南
- 微光模式:最大内存使用量为 10 MB。
- 互动模式:最大内存使用量为 100 MB。
内存使用量计算
要计算使用 Watch Face Format 的表盘中图像或位图字体的内存使用量,系统会执行以下操作:
- 解压缩图像或字体。
- 检查是否适用以下优化措施:
- 调整大小以更好地适应屏幕
- 裁剪透明像素
- 下采样到 RGB565,不损失保真度
根据生成的边界框,大小计算如下:
- 对于使用 RGBA8888 的图像和字体:4 x 宽度 x 高度
- 对于使用 RGB565 的图像和字体:2 x 宽度 x 高度
- 对于使用 ALPHA_8 位图配置的图像和字体:宽度 x 高度
互动模式
要计算互动模式的内存使用量,系统会对以下值求和:
- 任何 矢量字体 的未处理大小
- 系统默认字体的估计使用量
- 应用裁剪、调整大小和重新格式化后,图像和位图字体的总大小
配置
对于包含配置的表盘,系统会尝试计算不同配置下表盘资源的总大小。如果组合数量非常大,系统可能会高估同时使用的资源数量。
微光模式和层
系统假设微光模式最多使用三个全屏层,其中两个是静态的。这些层包括:
- 表盘背景。系统将其视为一个图像,无论背景由多少个图像组成。
- 移动部件,如指针、数字显示或动态元素。
- 源 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
代码库中找到。