使用标准视图的 Wear OS 应用受益于自动硬件加速图形渲染。不过,表盘通常使用画布实现,因此不会自动获得硬件加速。
为何要为表盘使用硬件加速画布?
在大多数情况下,当使用硬件加速画布时,表盘将以较高的帧速率渲染。在较高的帧速率下,动画和过渡效果会更流畅,让用户获得更出色的体验。
使用硬件加速画布时,您还可以访问有关表盘的更多界面性能数据。例如,当使用硬件加速画布时,您可以访问衡量界面性能中描述的详细帧信息。
我的表盘是否在使用硬件加速?
您可以使用开发者选项或 adb
来检查表盘是否正在使用硬件加速。
使用开发者选项进行检查
如需使用开发者选项来检查表盘是否正在使用硬件加速,请按以下步骤操作:
- 在 Wear OS 设备上,依次访问设置 > 开发者选项。
启用调试 GPU 性能剖析。
此选项会在可见 surface 之上绘制一个叠加层(每个 surface 上一个叠加层),以显示该 surface 在 GPU 渲染的每个阶段所花费的时间。
在设备上,返回到您的表盘。
如果您的表盘使用硬件加速画布,您将看到一个新条,对于表盘的每个渲染帧,您将看到表盘的每个渲染帧对应的新柱从右向左移动。
使用 adb 检查
如需使用 adb
检查表盘是否正在使用硬件加速,请按以下步骤操作:
- 在 Wear OS 设备上,将表盘更改为要测试的表盘。
- 让表盘在互动模式下运行几秒钟。
运行以下
adb
命令以检查表盘是否正在使用硬件加速:adb shell dumpsys gfxinfo [package-name]
运行该命令后,您会获得类似于以下示例的输出:
Applications Graphics Acceleration Info: Uptime: 2239933 Realtime: 13568751 ** Graphics info for pid 1100 [package-name] ** Stats since: 59875589194ns Total frames rendered: 1213 Janky frames: 0 (0.00%) 50th percentile: 7ms 90th percentile: 18ms 95th percentile: 25ms 99th percentile: 150ms Number Missed Vsync: 0 Number High input latency: 0 Number Slow UI thread: 0 Number Slow bitmap uploads: 0 Number Slow issue draw commands: 0 Number Frame deadline missed: 0 ...
在此示例输出中,请注意显示 Total frames rendered
的代码行。通常,如果输出中的渲染帧总数大于 0,则表示表盘使用了加速画布。否则,输入中的渲染帧总数和其他帧数据通常为 0。
不过,由于 gfxinfo
是应用完整软件包的输出,因此您可能会看到除硬件加速画布以外的其他某些帧时间信息,例如应用为配置屏幕使用的 Activity
。如需区分这两者,请确保表盘是唯一可见的 surface,然后重新运行 adb shell dumpsys gfxinfo
命令以检查 Total frames rendered
的值是否会增加。
最佳实践
请遵循以下最佳实践确保为用户提供最佳体验。
尽可能延长电池续航时间
如果您的表盘有长时间运行的动画,则使用硬件加速会大幅缩短设备的电池续航时间。如果表盘在每一帧中都尝试进行绘制,则此问题会更严重。为避免对用户造成负面影响,请勿在表盘中使用长时间运行的动画。本指南并非专门介绍使用硬件加速,但使用硬件加速会增加能够绘制的帧数,因此遵循最佳实践尤为重要。如需了解详情,请参阅动画最佳实践。
使用受支持的绘图操作
使用硬件加速时不支持某些绘制操作。如需了解受支持的绘制操作,请参阅硬件加速。如果某个小代码路径使用了不受支持的操作,您可以创建一个基于位图的画布,然后使用 canvas.drawBitmap()
将该位图绘制到表盘的画布中。
在使用硬件加速时保持兼容性
硬件加速适用于搭载 Android 9(API 级别 28)或更高版本的 Wear OS 设备。如果您希望避免在硬件加速不可用的旧款设备上执行特定绘制操作,或者希望在硬件加速画布上执行不受支持的绘制操作,您可以检查 Canvas.isHardwareAccelerated()
,然后提供替代功能。