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 中左侧时针图像的大小可以通过移除多余的透明像素来减少 97%,如该图右侧所示。
组合位图资产
如果您有一些经常一起绘制的位图,请考虑将它们组合成单个图形资产。例如,您通常可以将交互模式下的背景图像与刻度线组合在一起,以避免每次系统重绘表盘时都绘制两个全屏位图。
绘制缩放位图时禁用抗锯齿
当您使用 Canvas.drawBitmap()
方法在 Canvas
对象上绘制缩放位图时,您可以提供一个 Paint
实例来配置多个选项。为了提高性能,请使用 setAntiAlias()
方法禁用抗锯齿,因为此选项对位图没有任何影响。
使用位图过滤
对于您绘制在其他元素顶部的位图资产,请使用 setFilterBitmap()
方法在同一 Paint
实例上启用位图过滤。图 2 显示了带有和不带有位图过滤的时针的放大视图。
注意:当环境模式处于活动状态时,请禁用位图过滤。在低位环境模式下,系统无法可靠地渲染图像中的颜色以供位图过滤成功处理。
将耗时的操作移到绘图方法之外
系统每次重绘表盘时都会调用 Render.CanvasRenderer.render()
方法。为了提高性能,请仅在该方法内部包含严格需要更新表盘的操作。
如果可能,请避免在 Render.CanvasRenderer.render()
方法内部执行以下操作
- 加载图像和其他资源
- 调整图像大小
- 分配对象
- 计算结果在帧之间不变的计算
要分析表盘的性能,请使用 CPU Profiler。特别是,请确保 Render.CanvasRenderer.render()
实现的执行时间很短,并且在所有调用中都保持一致。有关更多信息,请参阅 使用 CPU Profiler 检查 CPU 活动。
相关资源
表盘示例应用 演示了配置表盘的最佳实践。