优化表盘

Wear OS 表盘会持续运行,因此它必须高效地使用电量。

尽可能优化表盘的性能。此页面提供整体表盘优化的最佳实践以及针对动画和图像的最佳实践。

基本优化

本节包含有关提高表盘整体效率的最佳实践。

表盘颜色和亮度

在表盘中使用深色可以减少用户手表耗电量。以下是如何设置表盘背景以优化表盘电池使用情况的建议

  • 颜色:尽可能使用黑色背景。
  • 亮度:如果无法使用黑色背景,请将背景颜色的亮度保持在色相、饱和度、值 (HSV) 或色相、饱和度、亮度 (HSB) 比例尺上的 25% 或以下。例如,如果您使用 Color 类来设置使用 HSV 比例尺定义的背景颜色,请对控制亮度的值设置使用 25 或更低的值。

使用动态功能与手机交互

当表盘需要在手机上运行操作时,仅在表盘处于活动状态时执行代码。建议让手机上的应用了解对应表盘处于活动状态的方法是使用CapabilityClient API

监控功耗

Wear OS 伴侣应用允许开发者和用户查看可穿戴设备上不同进程消耗了多少电量。要查看此信息,请导航至设置 > 手表电量

注册支持加密的表盘

Android 7.0 及更高版本支持基于文件的加密,并允许支持加密的应用在用户在启动时提供解密密码之前运行。这可以将从启动动画到表盘的过渡时间缩短最多 30 秒。

要启用更快的启动速度,请在表盘清单中添加android:directBootAware="true"

注意:请将此功能与不使用凭据加密存储的表盘一起使用。

动画最佳实践

本节中的最佳实践有助于减少与动画相关的功耗。

降低动画帧率

动画通常计算量很大,会消耗大量电量。大多数动画在每秒 30 帧时看起来很流畅,因此请避免以更高的帧率运行动画。相反,您可以使用动态帧率。有关更多信息,请参阅示例画布表盘

在动画之间让 CPU 休眠

为了最大程度地延长电池寿命,请谨慎使用动画。即使是闪烁的冒号也会在每次闪烁时消耗电量。

动画和表盘内容的细微变化会唤醒 CPU。例如,在交互模式下每秒使用短时间动画,然后让 CPU 休眠到下一秒,从而在动画之间让 CPU 休眠。即使是短暂地让 CPU 经常休眠,也可以显著降低功耗。

图像最佳实践

本节中的最佳实践有助于减少与图像相关的功耗。

减小位图资产的大小

许多表盘由背景图像加上其他图形资产组成,这些资产会被转换并叠加到背景图像上,例如时针和随着时间推移而移动的其他元素。这些图形资产越大,转换它们的计算量就越大。通常,这些图形元素会在 Render.CanvasRenderer.render()方法中旋转,有时还会缩放,每次系统重绘表盘时都会调用此方法,如绘制表盘中所述。

图 1. 裁剪时针以去除额外的像素。

减小位图资产的大小可以提高动画性能并节省电量。请遵循以下提示来提高表盘的性能

  • 不要使用比所需更大的图形元素。
  • 删除边缘周围多余的透明像素。

例如,图 1 中左侧时针图像的大小可以通过删除多余的透明像素来减少 97%,如该图右侧所示。

合并位图资产

如果您有多个经常一起绘制的位图,请考虑将它们组合成一个图形资产。例如,您通常可以将交互模式下的背景图像与刻度线组合起来,以避免每次系统重绘表盘时都绘制两个全屏位图。

在绘制缩放的位图时禁用抗锯齿

当您使用Canvas对象上的 Canvas.drawBitmap()方法绘制缩放的位图时,您可以提供一个Paint实例来配置多个选项。为了提高性能,请使用setAntiAlias()方法禁用抗锯齿,因为此选项对位图没有任何影响。

图 2. 位图滤镜禁用(左)和启用(右)的示例。

使用位图滤镜

对于您绘制在其他元素顶部的位图资产,请在同一Paint实例上使用setFilterBitmap()方法启用位图滤镜。图 2 显示了带有和不带有位图滤镜的时针的放大视图。

注意:当环境模式处于活动状态时,请禁用位图滤镜。在低位环境模式下,系统无法可靠地渲染图像中的颜色,以使位图滤镜能够成功处理。

将耗时的操作移到绘制方法之外

系统每次重绘表盘时都会调用Render.CanvasRenderer.render()方法。为了提高性能,请仅在此方法内部包含严格需要更新表盘的操作。

如果可能,请避免在Render.CanvasRenderer.render()方法内部执行以下操作

  • 加载图像和其他资源
  • 调整图像大小
  • 分配对象
  • 计算结果在帧之间不会发生变化的计算

要分析表盘的性能,请使用 CPU 分析器。特别是,请确保Render.CanvasRenderer.render()实现的执行时间很短,并且在每次调用之间保持一致。有关更多信息,请参阅使用 CPU 分析器检查 CPU 活动

表盘示例应用演示了配置表盘的最佳实践。