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()
方法内旋转(有时会缩放)。
![](https://developer.android.google.cn/static/training/wearables/watch-faces/images/ClockHandFull.png?authuser=0000&hl=da)
![](https://developer.android.google.cn/static/training/wearables/watch-faces/images/ClockHandCropped.png?authuser=0000&hl=da)
图 1. 剪裁时钟指针以移除多余的像素。
缩减位图资源的大小可改善动画性能并节省电量。请按照以下提示改善表盘的性能:
- 不要使用大于实际需求的图形元素。
- 移除边缘多余的透明像素。
例如,通过移除多余的透明像素,图 1 左侧的时钟指针图片的大小可以缩减 97%,如图 9 的右侧所示。
组合位图资源
如果您的某些位图经常一起绘制,不妨考虑将它们组合到单一图形资源中。您通常可以在交互模式下将背景图片与刻度线组合到一起,以避免系统每次重新绘制表盘时都绘制两个全屏位图。
绘制缩放后的位图时停用抗锯齿
当您使用
Canvas.drawBitmap()
方法在 Canvas
对象上绘制缩放后的位图时,您可以提供 Paint
实例来配置多个选项。若要提升性能,请使用 setAntiAlias()
方法停用抗锯齿,因为此选项对位图没有任何影响。
![](https://developer.android.google.cn/static/training/wearables/watch-faces/images/BitmapFilterDisabled.png?authuser=0000&hl=da)
![](https://developer.android.google.cn/static/training/wearables/watch-faces/images/BitmapFilterEnabled.png?authuser=0000&hl=da)
图 2. 停用(左侧)和启用(右侧)位图过滤的示例。
使用位图过滤
对于在其他元素之上绘制的位图资源,请使用 setFilterBitmap()
方法在相同的 Paint
实例上启用位图过滤。图 2 显示了应用和未应用位图过滤的时钟指针的放大视图。
注意:当氛围模式处于活动状态时,请停用位图过滤。在低位氛围模式下,系统无法在图像中为位图过滤可靠地渲染颜色以成功处理。
将开销大的操作移出绘制方法
每次重新绘制表盘时,系统都会调用 Render.CanvasRenderer.render()
方法。为了改善性能,请仅在此方法中包含更新表盘所必需的操作。
请尽可能避免在 Render.CanvasRenderer.render()
方法中执行以下操作:
- 加载图片和其他资源
- 调整图像大小
- 分配对象
- 执行其结果在各个帧之间不会改变的计算任务
如需分析表盘的性能,请使用 CPU 性能分析器。特别是,请确保 Render.CanvasRenderer.render()
实现的执行时间很短暂,且在不同的调用过程中保持一致。如需了解详情,请参阅使用 CPU 性能分析器检查 CPU 活动。
相关资源
表盘示例应用演示了配置表盘的最佳实践。