Battery Historian 工具提供了对设备电池消耗随时间的洞察。在系统范围内,该工具以 HTML 表示形式可视化系统日志中的与电源相关的事件。在特定于应用程序的级别,该工具提供了各种数据,可以帮助您识别消耗电池电量的应用程序行为。
本文档描述了一些您可以使用 Battery Historian 来了解电池消耗模式的方法。该文档首先解释如何读取 Battery Historian 报告的系统范围数据。然后,它介绍了一些您可以使用 Battery Historian 来诊断和解决与电池消耗相关的应用程序自身行为的方法。最后,它提供了一些关于 Battery Historian 可能特别有用的场景的提示。
使用系统范围视图
Battery Historian 工具提供了对各种应用程序和系统行为的系统范围可视化,以及它们与电池消耗随时间的相关性。此视图(如图 1 所示)可以帮助您诊断和识别应用程序的电量使用问题。
在此图中,尤其值得注意的是表示电池电量水平的黑色的水平向下趋势线,在 y 轴上测量。例如,在电池电量线的开头,大约在上午 6:50,可视化显示电池电量水平下降得比较快。
图 2 提供了显示屏该部分的特写镜头。
在电池电量线的开头,随着电池电量急剧下降,显示屏显示出三件事正在发生:CPU 正在运行,应用程序已获取唤醒锁,并且屏幕处于开启状态。通过这种方式,Battery Historian 帮助您了解电池消耗高时发生了哪些事件。然后,您可以针对应用程序中的这些行为,并调查是否存在您可以进行的相关优化。
系统范围的视觉化也可以提供其他线索。例如,如果它显示移动无线电经常被打开和关闭,那么可能有机会通过智能调度 API(如 JobScheduler 或 Firebase Job Dispatcher)来优化这种行为。
下一部分解释如何调查特定于您自己的应用程序的行为和事件。
查看特定于应用程序的数据
除了系统范围视图提供的宏观级数据外,Battery Historian 还提供特定于设备上运行的每个应用程序的数据表和一些可视化。表格数据包括
- 应用程序在设备上的估计功耗。
- 网络信息。
- 唤醒锁。
- 服务。
- 进程信息。
这些表格提供了关于您的应用程序的两方面数据。首先,您可以查看您的应用程序的功耗排名与其他应用程序的对比。为此,请单击表格下的设备功耗估计表。此示例检查了一个名为 Pug Power 的虚构应用程序。
图 3 中的表格显示,Pug Power 是该设备上第九大耗电量最高的应用程序,也是第三大不属于操作系统的应用程序。此数据表明该应用程序需要进行更深入的调查。
要查找特定应用程序的数据,请在可视化左侧的应用程序选择下,将应用程序包名称输入两个下拉菜单中的下侧菜单。
当您选择特定应用程序时,以下数据可视化类别将更改为显示特定于应用程序的数据,而不是系统范围的数据
- SyncManager。
- 前台进程。
- 用户空间唤醒锁。
- 顶级应用程序。
- JobScheduler。
- 活动管理器进程。
SyncManager 和 JobScheduler 可视化可以立即显而易见地看出您的应用程序是否比必要情况更频繁地执行同步和作业。这样做可以快速揭示一个机会,可以优化您的应用程序行为以提高电池性能。
您还可以获得一个额外的特定于应用程序的可视化数据,即用户空间唤醒锁。要将此信息包含在错误报告中,请在您的终端窗口中输入以下命令
$ adb shell dumpsys batterystats --enable full-wake-history
图 5 和图 6 显示了 Pug Power 的数据:图 5 显示了特定于应用程序的数据的可视化,图 6 显示了相应的表格数据。
查看可视化并没有立即发现明显的问题。JobScheduler 行显示该应用程序没有计划任何作业。SyncManager 行显示该应用程序没有执行任何同步。
但是,检查表格数据的唤醒锁段显示,Pug Power 获得的唤醒锁总时长超过一小时。这种不寻常且代价高昂的行为可能是该应用程序功耗高的原因。此信息有助于开发人员定位可能极大地帮助优化的领域。在这种情况下,为什么应用程序会获取如此多的唤醒锁时间,以及开发人员如何改善这种行为?
Battery Historian 可以帮助的其他情况
Battery Historian 可以帮助您诊断提高电池行为的机会,还有许多其他情况。例如,Battery Historian 可以告诉您您的应用程序是否
- 过度频繁地触发唤醒警报(每 10 秒或更短时间)。
- 持续保持 GPS 锁定。
- 每 30 秒或更短时间内计划一次作业。
- 每 30 秒或更短时间内计划一次同步。
- 比您预期的更频繁地使用蜂窝无线电。