节能在 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 上的健康服务时。
在某些情况下,可以获取唤醒锁定。例如,当您的 应用执行以下操作之一:
- 在后台播放媒体内容。
- 使用
WorkManager
或JobScheduler
。(系统会保存 唤醒锁定)。
借助 Battery Historian,您可以查看 唤醒锁定次数,以及唤醒锁定总次数和持续时间的总结 暂缓处理。检查您的应用执行的唤醒锁定的次数和持续时间 并将这些信息与您的应用的交互使用模式进行比较, app:
- 检查是否有意外的唤醒锁定。
- 如果持续时间比预期长,请考虑工作是否 因某些依赖项(例如网络可用性)而被屏蔽。
检查应用变为非活跃状态的情况
考虑当关键设备事件(例如 以下:
- 屏幕关闭,设备进入氛围模式。
应用滑动关闭。
如需分析应用活动,请使用下面几部分中介绍的工具。
Energy Profiler
可以在 Android Studio 菜单中访问 Energy Profiler,方法是选择 查看 >工具窗口 >Profiler:
- 在屏幕关闭和设备进入时检查系统轨迹 氛围模式。
- 查看继续进行的所有工作以及设备的 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
此命令的结果如下所示:
- 当前和以前的传感器注册。
- 传感器配置,包括批处理(如果设置)。
- 近期的抽样数据。
测试传感器的取消注册
要检查应用是否按预期停止提取传感器数据,请测试 以下情况:
- 滑动关闭您的应用。
- 用手掌轻击屏幕。此操作会关闭屏幕或 将屏幕置于氛围模式。
使用上一部分中的 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 之间保持一致。
为您推荐
- 注意:当 JavaScript 处于关闭状态时,系统会显示链接文字
- 在后台访问位置信息
- 设置闹钟
- 创建高级 widget {:#advanced-widget}