使用标准视图的 Wear OS 应用可以受益于自动硬件加速图形渲染。但表盘通常使用画布实现,因此不会自动获得硬件加速。
为什么为您的表盘使用硬件加速画布?
在大多数情况下,使用硬件加速画布时,您的表盘会以更高的帧率渲染。在更高的帧率下,动画和过渡在视觉上显得更加流畅,从而提供更好的用户体验。
使用硬件加速画布时,您还可以访问有关表盘的更多 UI 性能数据。例如,只有在使用硬件加速画布时,才能访问 测量 UI 性能 中描述的详细帧信息。
我的表盘是否正在使用硬件加速?
您可以使用开发者选项或 adb
检查您的表盘是否正在使用硬件加速。
使用开发者选项进行检查
要使用开发者选项检查您的表盘是否正在使用硬件加速,请按照以下步骤操作
- 在 Wear OS 设备上,导航到**设置** > **开发者选项**。
启用**调试 GPU 性能分析**。
此选项会在可见表面之上绘制一个覆盖层(每个表面一个),以显示在该表面的每个 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
)的一些帧时间信息。要区分它们,请确保您的表盘是唯一可见的表面,然后重新运行 adb shell dumpsys gfxinfo
命令以检查 Total frames rendered
的值是否增加。
最佳实践
遵循以下最佳实践,以确保为您的用户提供最佳体验。
最大限度地延长电池续航时间
如果您的表盘具有长时间运行的动画,使用硬件加速可能会大大降低设备的电池续航时间。如果您的表盘尝试在每一帧中绘制内容,则此问题可能会变得更糟。为避免对用户产生负面影响,请勿在表盘中使用长时间运行的动画。此指南并非特定于使用硬件加速,但由于使用硬件加速会增加您能够绘制的帧数,因此遵循此指南显得更加重要。有关更多信息,请参阅 动画最佳实践。
使用受支持的绘图操作
使用硬件加速时,某些绘图操作不受支持。有关支持内容的信息,请参阅 硬件加速。如果您有一个使用不受支持操作的小代码路径,您可以创建一个以位图为后备的画布,然后使用 canvas.drawBitmap()
将该位图绘制到表盘的画布中。
使用硬件加速时保持兼容性
运行 Android 9(API 级别 28)或更高版本的 Wear OS 设备上提供硬件加速。如果您想在较旧的设备(在这些设备上硬件加速不可用)或硬件加速画布上的不受支持的绘图操作上避免特定的绘图操作,则可以检查 Canvas.isHardwareAccelerated()
,然后提供备选功能。