优化表盘

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

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

使用位图过滤

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

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

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

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

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

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

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

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