Android 手机耗电数据分析工具介绍

embedded/2025/3/17 15:39:49/

ce89f91aad67734df32533bc1cdfb9dc.gif

和你一起终身学习,这里是程序员Android

本篇文章主要介绍 Android 开发中 电量 的部分知识点,通过阅读本篇文章,您将收获以下内容:

一、安装Battery Historian
二、收集Batterystats 数据
三、使用Battery Historian分析数据
四、Batterystats 额外数据
五、使用Battery Historian 分析电量消耗
六、Battery Historian能干什么

本文主要分析了Batterystats工具和Battery Historian脚本的基本用法和工作流程。

Batterystats是一个包含在Android框架中的工具,用于收集设备上的电池数据。 您可以使用adb将收集的电池数据转储到您的开发机器上,并创建一个报告,您可以使用Battery Historian进行分析。 Battery Historian将来自Batterystats的报告转换为可在浏览器中查看的HTML可视化文件。

它有什么好处:

向您显示过程在何处以及如何从电池中吸取电流。
识别您的应用程序中可延期或甚至删除的任务以延长电池寿命。

一、安装Battery Historian

安装Battery Historian的最简单方法是使用Docker。 有关备用安装方法(包括从源代码构建)。 要使用Docker进行安装,请执行以下操作:

  • 1.按照Docker网站上的说明安装Docker Community Edition。

  • 2.要确认Docker已正确安装,请打开命令行并输入以下命令:
    docker run hello-world

5dc2ea87ddb992eb79b451fa3159602d.jpeg
Docker 成功安装信息
  • 3.使用以下命令运行Battery Historian图像:

docker --run -p port_number:9999 gcr.io/android-battery-historian:2.1 --port 9999

    1. 在浏览器中导航到Battery Historian以确认它正在运行。 地址因操作系统而异:
      Linux and Mac
      http://localhost/port_number
      For Windows
      http://123.456.78.90:port_number
      您将看到Battery Historian起始页面,您可以在其中上载和查看电池统计信息。
4cfd0d32659a61edd89782b24ab61af6.jpeg
Battery Historian 首页

二、收集Batterystats 数据

连接手机,打开开发者模式,连接adb。

    1. 重置 batterystats 数据

adb shell dumpsys batterystats --reset

设备始终在后台收集batterystats和其他调试信息。 重置会清除旧电池采集数据.

    1. 断开设备与电脑的连接,以便只从设备的电池中消耗电流。
    1. 玩你的应用程序,并执行你想要的数据的行为; 例如,断开与WiFi的连接并将数据发送到云端。
    1. 重新连接手机dump数据

adb shell dumpsys batterystats > [path/]batterystats.txt

    1. 导出原始bugreport数据

Android 7.0 以上
adb bugreport > [path/]bugreport.zip

Android 5.0/ 6.0
adb bugreport > [path/]bugreport.txt

  • 6.打开并提交分析数据
    Battery Historian分析网站 需翻墙

三、使用Battery Historian分析数据

成功提交后,数据分析如下

5b187c92c46c766b73401a803a6ae4e9.jpeg
Battery Historian
    1. 从下拉列表中添加其他指标。
    1. 将鼠标悬停在信息图标上可查看有关每个指标的更多信息,包括图表中使用的颜色的关键字。
  • 3.将鼠标悬停在栏上,即可查看有关该指标的详细信息以及时间线上特定点的电池状态。

四、Batterystats 额外数据

Battery Historian图表下面的stats部分可以查看batterystats.txt文件中的其他信息。

3577ddf45dcfb2099d64a2d78afd687c.jpeg
Batterystats 额外数据
  1. System Stats选项卡包含系统范围的统计信息,如单元信号级别和屏幕亮度。 这些信息提供了设备发生情况的整体情况。 这对确保没有外部事件影响您的测试特别有用。

  2. App Stats选项卡包含有关特定应用程序的信息。 使用左侧的应用程序选择窗格中(图3)排序应用程序下拉列表对应用程序列表进行排序。 您可以选择一个特定的应用程序来查看使用下面(图4)个应用程序下拉列表的统计信息。

五、使用 Battery Historian 分析电量消耗

Battery Historian工具提供了一段时间内设备电池消耗的深入分析。 在全系统级别,该工具以HTML表示形式从系统日志中查看与电源相关的事件。 在特定应用程序级别,该工具提供了各种数据,可帮助您确定电池耗尽应用程序的行为。

本文档介绍了使用Battery Historian了解电池消耗模式的一些方法。 该文件首先解释如何读取Battery Historian报告的系统范围数据。 然后,介绍如何使用Battery Historian诊断和解决与电池消耗有关的应用行为。 最后,它提供了有关Battery Historian可能特别有用的场景的几个提示。

Battery Historian工具提供了各种应用程序和系统行为的系统范围可视化,以及随着时间的推移与电池消耗的相关性

8cf27bb00991b2a3373916165b5fd473.jpeg
Battery Historian 事例

此图特别感兴趣的是在y轴上测量的代表电池电量的黑色水平下降趋势线。 例如,在电池水平线的最开始时间点,大约早上6点50分,可视化显示电池电量水平相对急剧下降。

10d7d4cfeacd9432a017028f14cb9669.jpeg
CPU 唤醒锁等信息

在电池电量线开始时,随着电池电量急剧下降,显示屏显示出三件事:CPU正在运行,应用程序已获取唤醒锁,屏幕亮起。 通过这种方式,Battery Historian可帮助您了解电池消耗高时发生的事件。 然后,您可以将这些行为定位到您的应用中,并调查是否可以进行相关的优化。

除了系统范围内提供的宏观数据外,Battery Historian还提供特定于设备上运行的每个应用程序的表格和一些可视化数据。 表格数据包括:

  • 该应用在设备上的预计用电量。
  • 网络信息。
  • Wakelocks。
  • 服务。
  • 进程信息。

这些表格提供了有关您的应用的两个维度数据。 首先,您可以查看您的应用的用电量排名与其他应用的相比。 为此,请单击表下的设备功率估算表。 这个例子考察了一个名为Pug Power的虚构应用程序。

40845eb919c659d28c76ef1a7420c84d.jpeg
调查哪些应用程序消耗的功率最大

上图的表格显示,Pug Power是该设备上第九大电池供电用户,也是不属于操作系统的第三大应用。 这个数据表明,这个应用程序承担更深入的调查。

要查找特定应用程序的数据,请将其包名称输入位于可视化左侧下方应用程序选择下的两个下拉菜单中的较低位置

63ef857c0e6b930887660a40308f432c.jpeg

当您选择特定的应用程序时,以下数据可视化类别将更改为显示应用程序特定的数据而不是系统范围的数据:

  • SyncManager.
  • Foreground process.
  • Userspace Wakelock.
  • Top app.
  • JobScheduler.
  • Activity Manager Proc.

如果您的应用程序执行同步并执行作业的次数超过必要,SyncManager和JobScheduler可视化立即显而易见。 在此过程中,他们可以快速发现优化应用行为以改善电池性能的机会。

您还可以获得更多的特定于应用程序的可视化数据,用户空间Wakelock。 要将此信息包含在错误报告中,请在终端窗口中输入以下命令:
adb shell dumpsys batterystats --enable full-wake-history

ps:从Android 6.0(API级别23)开始,该平台包含Doze功能,这对应用程序实施了某些优化。 例如,无论JobScheduler如何安排他们,Doze都会在短期维护时段内批处理作业。

81d30a65328075db82aea72c8b471aaf.jpeg
显示特定应用的可视化数据
bdec3191be03826697fca4e55506cc30.jpeg
应用数据表格

看看可视化并不立即显示任何东西。 JobScheduler行显示该应用程序没有计划任务。 SyncManager行显示应用程序未执行任何同步。

然而,对表格数据的Wakelocks部分的检查表明,帕格电力总共花费了一个多小时的时间。 这种不寻常的和昂贵的行为可以解释应用程序的高功耗水平。 这一信息有助于开发人员瞄准优化可能极大帮助的领域。 在这种情况下,为什么应用程序会获得如此多的唤醒时间,开发人员如何改善这种行为?

六、Battery Historian能干什么

Battery Historian还可以帮助您诊断改善电池行为的机会。 例如,Battery Historian可以告诉你你的应用程序是否:

  • 过度频繁地发出唤醒警报(每10秒钟或更少)。
  • 持续持有GPS锁。
  • 每30秒或更短时间安排一次作业。
  • 计划每30秒或更短时间同步一次。
  • 更频繁地使用蜂窝无线电比您期望的更频繁。

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

0ed0fdf4aea784598d90d3db3ed7359f.jpeg

点个在看,为大佬点赞!

文章来源:https://blog.csdn.net/wjky2014/article/details/146246254
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/embedded/172951.html

相关文章

Linux第三次作业

一.创建根目录结构中的所有的普通文件 使用 mkdir -pv [路径] 创建目录文件 使用 touch [路径] 创建普通文件 二.列出所有账号的账号名 用 cat 命令查看在 /etc/passwd 中的用户信息 用 cut -d [ ] -f[ ] 命令切割出所有用户名 三.将/etc/passwd中内容按照冒号隔开的第三个字符…

QKV矩阵:优维大模型自注意力机制的数学之美

★ 放闸溯源 优维大模型「骨架级」技术干货 第三篇 ⇓ QKV矩阵是Transformer自注意力机制的数学核心,其通过矩阵运算实现上下文信息的动态加权聚合。优维大模型将QKV的抽象计算逻辑具象化为运维场景的智能决策引擎,赋予系统“理解-推理-行动”的全链…

能否调整爬虫以支持多页商品列表?

当然可以!调整爬虫以支持多页商品列表是一个常见的需求,尤其是在商品数量较多时。通过分析目标网站的分页机制,可以实现自动翻页并获取多页商品列表。以下是如何调整爬虫代码以支持多页商品列表的详细步骤和代码示例。 一、分析分页机制 首…

MySQL(事物上)

目录 示例: 一 引入事物 1. 概念 2. 事物的4大特性 3. 为什么要有事物? 二 事物操作 1. 查看存储引擎支持的事物 2. 事物的提交方式 2.1 查看事物的默认提交方式 2.2 设置事物的默认提交方式 2.3 查看事物的全局隔离级别 2.4 验证事物的回滚…

1141. 【贪心算法】排队打水

题目描述 有n&#xff08;n<1000&#xff09;个人在一个水龙头前排队接水&#xff0c;假如每个人接水的时间为Ti&#xff0c; 请编程找出这n个人排队的一种顺序&#xff0c;使得n个人的平均等待时间最小。输入 输入文件共两行&#xff0c;第一行为n&#xff1b; 第二行分别…

深入解析 React Diff 算法:原理、优化与实践

深入解析 React Diff 算法&#xff1a;原理、优化与实践 1. 引言 React 作为前端领域的标杆框架&#xff0c;采用 虚拟 DOM&#xff08;Virtual DOM&#xff09; 来提升 UI 更新性能。React 的 Diff 算法&#xff08;Reconciliation&#xff09; 是虚拟 DOM 运行机制的核心&a…

AI购物新物种诞生!拆解Naver个性化服务布局的3个底层逻辑

技术如何重塑用户购物体验&#xff1f;解码韩国巨头的数据野心 韩国首尔江南区一栋玻璃幕墙大楼内&#xff0c;工程师们正在调试第37版算法模型。这不是普通的互联网公司日常&#xff0c;而是Naver为旗下购物平台开发的"超个性化推荐系统"最后的压力测试。当这个系统…

蓝桥杯每日一题01背包拔高·小A点菜

P1164 小A点菜 题意: 有M大的背包, N种物品, 每种物品价值为1, 体积为 a ,求方案数。 题解: 背包五大分析模块, 确定下标含义, 初始化数组, 推出递推公式, 输出答案, 我用一维01背包那么j就代表背包题解M, 那么 当j的值等于a时候 : dp[j] max(dp[j], dp[j - a] 1 )当j的值…