节省电量和电量

节能在 Wear OS 上尤为重要。Wear OS设计 原则会非常关注设备的功耗,因为手表是 外形小巧,专为短时间交互而设计。

与较大的移动设备相比,Wear OS 设备的电池较小,因此 任何耗电都更明显。此外,这还会让用户耗费更多精力 为 Wear OS 设备充电(与移动设备相比)。用户可以充电 每天的不同时间段,他们都需要 在为设备充电之前,将 Wear OS 设备与身体分离。

如需提高应用的电源效率,请遵循以下设计最佳做法:

  • 应用的设计应充分利用 Wear OS 的外形规格。它 而不应直接复制您的移动应用。
  • 使用您现有的移动应用来帮助实现某些应用场景。例如: 使用手表访问互联网和同步的成本较高;您需要考虑 移动设备可以完成繁杂的工作,而 Wear OS 设备则会获得 数据变化。
  • 针对较短的互动设计用例。
  • 考虑您使用的是哪些 Wear OS 事件,以及这些事件的频率 。
  • 请尽可能推迟应用工作,直到手表充电。 这尤其适用于数据密集型任务,例如同步数据和 组织数据库

    如果设备正在充电并具有 Wi-Fi 连接,请将作业安排到 预提取用户可能想在您的 应用。

本能效指南可帮助您了解系统何时以及如何运行您的应用,以及 如何限制应用的运行时和耗电如需详细了解 可以实现特定的操作,例如加载应用或滚动浏览 列表 - 访问与性能相关的指南,例如 Compose on Wear OS 效果指南

监控一段时间内的电池用量

如需分析运行您应用的 Wear OS 设备的电池统计信息,请输入 在开发机器上的终端窗口中运行以下命令:

adb shell dumpsys batterystats

GitHub 上的一个库采用了电池统计信息解析器, 与此命令一起运行会很有用。

影响电池续航时间的事件

在具体考虑你的应用之前,最好先概括性地思考一下 Wear OS 设备耗电事件。

下表显示了几个应用对电池续航时间的相对影响 Wear OS 应用中的常见事件。确切的功耗因设备而异。

事件 对电池续航时间的影响 如何缓解
访问网络,包括 LTE 和 WLAN 非常高 将非必需网络访问推迟到设备充电。
开启屏幕并启动互动模式 建议用户保持屏幕的时间超过 。提供一种采用 始终开启 模式(也称为氛围模式)。
访问 GPS 传感器 如果可能,请等待用户请求 GPS 访问权限。
保持较高的 CPU 使用率 消费 如何使用 Jetpack Compose 构建工作流
访问心率传感器 在以下情况下使用处理器的唤醒时间: 从传感器 API 接收回调,例如使用 启用健康服务 Wear OS
通过蓝牙访问其他设备 保持会话简短。
保持唤醒锁定 减少手动创建唤醒锁定的情况和对唤醒锁定的使用 <ph type="x-smartling-placeholder"></ph> WorkManager

最大限度地缩短屏幕开启时间

在 Wear OS 应用中,请遵循以下屏幕使用原则:

  • 屏幕锁定:请尽可能避免。如要进行测试,请关闭始终开启 display,并观察屏幕在 超时期限。
  • 动画:尽量减少制作精妙的动画,将重点放在简要的画面上 使视频看起来更专业。尤其要避免长时间运行 动画和循环。如果需要循环,请在循环之间添加暂停 且至少与动画本身一样长
  • 氛围模式下的唤醒时间:必要时支持始终开启,例如 健身应用场景。如果您的应用要求始终开启,请检查您的应用是否 当设备处于氛围模式时,会出现以下情况:

    • 降低设备屏幕亮起的百分比。
    • 不显示动画。
    • 不会更新屏幕内容,除非是 onAmbientUpdate() 回调。

最大限度地减少 CPU 使用率

在 Wear OS 应用中,请遵循以下 CPU 使用原则:

  • 使用简洁明了。
  • 批处理所有相关操作,最大限度地缩短应用的处理时间 处于闲置状态。

最大限度地减少唤醒锁定

在大多数情况下,请避免任何阻止应用休眠的操作,例如 唤醒锁定。例如,在健康和健身应用,长期锻炼 不需要唤醒锁。接收回调时使用处理器的唤醒时间 通过传感器 API 实现,例如使用 Wear OS 上的健康服务时。

在某些情况下,可以获取唤醒锁定。例如,当您的 应用执行以下操作之一:

借助 Battery Historian,您可以查看 唤醒锁定次数,以及唤醒锁定总次数和持续时间的总结 暂缓处理。检查您的应用执行的唤醒锁定的次数和持续时间 并将这些信息与您的应用的交互使用模式进行比较, app:

  • 检查是否有意外的唤醒锁定。
  • 如果持续时间比预期长,请考虑工作是否 因某些依赖项(例如网络可用性)而被屏蔽。

检查应用变为非活跃状态的情况

考虑当关键设备事件(例如 以下:

  • 屏幕关闭,设备进入氛围模式。
  • 应用滑动关闭

如需分析应用活动,请使用下面几部分中介绍的工具。

Energy Profiler

可以在 Android Studio 菜单中访问 Energy Profiler,方法是选择 查看 >工具窗口 >Profiler

  1. 在屏幕关闭和设备进入时检查系统轨迹 氛围模式。
  2. 查看继续进行的所有工作以及设备的 CPU 使用率。

Perfetto

借助 Perfetto,您可以记录轨迹,然后检查应用 当屏幕关闭、设备时,是否有线程在执行任何工作 进入氛围模式,或者用户关闭应用的 activity。

定义自定义事件以标记应用中的重要事件,包括 特定领域的事件。对于媒体应用,这包括提取等任务 播放列表、下载特定媒体项、开始播放和停止播放 。通过定义这些事件,您可以在 Perfetto 中查看它们, 与应用的 CPU 和功耗有关的计时。

分析应用的预定作业

借助使用 WorkManager 的计划性作业,您可以在 应用。尽管某些后台工作必须定期运行,但不要同时运行作业 频繁或长时间使用,因为这可能会消耗设备的电池电量。

使用 Battery Historian 检查预定作业的执行情况 总体(系统统计信息 > Jobscheduler 统计信息)和应用的统计信息(应用统计信息 > 预定作业)。查看总数和总时长:

  • 如果作业运行非常频繁,请考虑降低此频率。
  • 检查总执行时间是否符合预期,但是否不符合预期 显著增加。

此外,还要检查 Battery Historian 图,请查看每个 JobScheduler 条目。将指针悬停在特定条目上时,Battery Historian 显示正在执行的作业的所有者。注意事项:

  • 对于您的应用,执行时长应该合理。
  • 请考虑作业是否发生在应用运行时, 作业代表定期的后台工作。

传感器

Wear OS 设备有许多不同的传感器,例如 GPS。在大多数情况下,使用 Wear OS 上的健康服务,而不是直接与 SensorManager。在许多情况下,健康服务会智能地对数据进行批处理 以提升电池性能。

如需分析应用中的传感器使用情况,请在终端中运行以下命令 窗口:

adb shell dumpsys sensorservice

此命令的结果如下所示:

  • 当前和以前的传感器注册。
  • 传感器配置,包括批处理(如果设置)。
  • 近期的抽样数据。

测试传感器的取消注册

要检查应用是否按预期停止提取传感器数据,请测试 以下情况:

  1. 滑动关闭您的应用。
  2. 用手掌轻击屏幕。此操作会关闭屏幕或 将屏幕置于氛围模式。

使用上一部分中的 ADB 命令检查传感器 正确显示为未注册

数据层

使用 Data Layer API 时,每次传输都会消耗一些电量。在 具体来说,如果您使用此 API 发送数据,您的应用必须唤醒才能接收 数据。出于这些原因,请保守地使用此 API。

关于使用 Data Layer API 的一些其他最佳做法包括: 以下:

  • 请先等待应用处于活动状态,然后再使用 WearableListenerService
  • 传输状态变化,而不是配置快速更新。这些州 更改可让 Wear OS 设备执行本地数据计算,例如在 锻炼会话开始。

    仅传输用于更新界面的状态变化。例如,如果您的 活动屏幕仅显示“跑步公里数”小数点后一位,不发送 每当用户移动另一个计量供给时,Wear OS 的状态会发生变化 。

如需分析应用中的 Data Layer API 使用情况,请在以下位置运行以下命令: 终端窗口:

adb shell dumpsys activity service WearableService

此命令的结果包括以下内容:

  • RpcService:可让您查看使用活动的频率和路径 使用 MessageClient 调用。
  • DataService:可让您查看使用 DataClient

健康与健身应用

如果您有健康与健身应用,请使用健康服务进行优化 应用的传感器使用行为

  • 对于 ExerciseClient,请使用 Battery Historian 验证行为是否正确 在微光模式下。检查并确保应用唤醒频率不会超过 以接收 ExerciseUpdate 数据。
  • 如需全天进行常规健康监控,请使用 PassiveMonitoringClient,如下所示: 如何在 Google Analytics 中监控 背景

功能块和复杂功能

如果您的应用支持功能块复杂功能,请遵循以下最佳做法 做法:

  • 停用自动刷新,或将刷新频率提高到 2 小时,或者 。
  • 使用 Firebase Cloud Messaging (FCM)合理安排时间 作业来发送数据更新。注意不要过于频繁地更新 这会使系统以比实际时间 用户或平台可以访问执行相应工作所需的数据。
  • 在用户未操作时,不要为功能块或复杂功能安排工作 交互方式。
  • 使用离线优先方法
  • 在您的主应用、功能块和复杂功能之间共享单个数据库。这个 还有助于数据在各个界面 surface 之间保持一致。