优化表盘

Wear OS 表盘持续运行,因此必须高效利用电量。

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

基本优化

本部分包含提高表盘整体效率的最佳实践。

表盘颜色和亮度

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

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

使用动态功能与手机交互

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

监控电量消耗

Wear OS 配套应用让开发者和用户可以查看可穿戴设备上不同进程消耗了多少电量。要查看此信息,请前往 设置 > 手表电池

注册加密感知型表盘

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

要加快启动速度,请将 android:directBootAware="true" 添加到表盘清单中。

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

动画最佳实践

本部分中的最佳实践有助于减少与动画相关的电量消耗。

降低动画帧率

动画通常计算成本高昂,消耗大量电量。大多数动画在每秒 30 帧时看起来都很流畅,因此请避免以更高的帧率运行动画。您可以改用动态帧率。如需了解详情,请参阅 Canvas 表盘示例

让 CPU 在动画之间休眠

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

动画和表盘内容的微小变化都会唤醒 CPU。通过例如在互动模式下每秒使用短时动画爆发,然后让 CPU 休眠直到下一秒,这样可以让 CPU 在动画之间休眠。让 CPU 经常休眠,即使是短暂的,也能显著降低功耗。

图片最佳实践

本部分中的最佳实践有助于减少与图片相关的电量消耗。

减小位图资源的大小

许多表盘由背景图片加上其他图形资源(例如时钟指针和其他随时间移动的元素)组成,这些图形资源会经过转换并叠加到背景图片上。这些图形资源越大,转换它们的计算成本就越高。通常,这些图形元素会在系统每次重绘表盘时,在 Render.CanvasRenderer.render() 方法中进行旋转,有时还会进行缩放,如绘制表盘中所述。

图 1. 裁剪时钟指针以去除多余像素。

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

  • 不要使用超出您所需大小的图形元素。
  • 移除边缘周围多余的透明像素。

例如,图 1 左侧的时钟指针图片通过移除多余的透明像素,其大小可以减小 97%,如图右侧所示。

合并位图资源

如果您的位图经常一起绘制,请考虑将它们合并到一个图形资源中。例如,您通常可以在互动模式下将背景图片与刻度线结合起来,以避免系统每次重绘表盘时都绘制两个全屏位图。

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

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

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

使用位图过滤

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

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

将高开销操作移出绘制方法

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

在可能的情况下,避免在 Render.CanvasRenderer.render() 方法中执行以下操作:

  • 加载图片和其他资源
  • 调整图片大小
  • 分配对象
  • 帧之间结果不变的计算

要分析表盘的性能,请使用 CPU Profiler。特别是,请确保您的 Render.CanvasRenderer.render() 实现的执行时间很短,并且在不同调用之间保持一致。如需了解详情,请参阅使用 CPU Profiler 检查 CPU 活动

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