Android耗电分析之Battery Historian工具使用

news2024/11/25 8:23:53

Battery-Historian是谷歌推出的一款专门分析Bugreport的工具,是谷歌在2015年I/O大会上推出的一款检测运行在android5.0(Lollipop)及以后版本的设备上电池的相关信息和事件的工具,是一款对于分析手机状态,历史运行情况很好的可视化分析工具。

当设备在使用电池的时候,它可以使开发者们看到系统级和应用级事件图表,在图表时间轴上可以缩放和平移,能够直观的看到自上一次充满电到现在设备电池的统计汇总信息,它可以选中一个应用程序来检查该应用影响电池电量的一些参数,并且可以对比两个bugreport文件信息分析,并对其电池关键区别点做高亮显示。

不过,需要注意的是,battery historian在使用时候不能在充电,同时确保设备运行在Android 5.0及以上版本。而对于Android8.0及其以上版本,我们更推荐使用Android Studio自带的Energy Profiler工具。

一、Battery Historian环境

battery historian分析需要安装Docker,其安装和运行方法官方有详细的说明:Battery Historian安装。可能在本地安装Battery Historian环境还比较繁琐,此次推荐一个别人搭建好的地址:https://bathist.ef.lc/。

image.png

二、生成耗电报告

耗电统计是系统组件,伴随系统运行的整个过程,也就是说只要系统在运行它就会一直统计耗电数据。这个统计是基于软件层面实现的,不同的硬件模块配置了不同的参数,然后使用算法进行估算,power_profile文件的参数值OEM厂商必须测量并提供前实际值,所以不同的厂商是不一样的。

另外,获取统计报告的时候需要将重置统计,并断开usb连接,并且不能处于充电状态,否则会大大影响统计的结果。下面是使用步骤:

  1. 连接手机,打开开发者模式,然后连接adb。
  2. 重置batterystats 数据, 手机始终在后台收集batterystats和其他调试信息,重置的命令:
adb shell dumpsys batterystats –reset
  1. 持续使用我们需要测试的应用,然后导出原始bugreport数据,导出的命令:
//Android 7.0及以上版本
adb bugreport bugreport.zip


//Android 5.0及以上版本
adb bugreport > bugreport.txt

等待报告生成,会生成一个bugreport.zip或bugreport.txt文件,如下图。

image.png

三、Battery Historian 指标分析

打开https://bathist.ef.lc/网站,选择bugreport.zip文件并上传。
 

image.png


等待分析结果,分析完成之后,系统会生成如下的图表。
 

image.png


图表按类别进行组织,随着时间的推移显示每个类别的栏,如图表的X轴上所示。不同颜色代表指标的不同状态:比如Screen 红色代表亮屏,白色代表关屏,具体鼠标放在最左侧的️上就会自动提示。

默认情况下,统计信息是在运行基础上维护的,Android也不记录特定于应用程序的用户空间wakelock转换的时间戳。如果您希望Historian在时间线上显示关于每个单独唤醒锁的详细信息,则应在开始实验之前使用以下命令启用完整唤醒锁报告。

adb shell dumpsys batterystats --enable full-wake-history

然后,我们来看一下具体的指标,分析前我们需要选择某个具体的应用:

image.png


页面的右下角有几个选项卡,可以用来查看一些具体的性能数据:

  • System Stats:包含系统范围的统计信息,如单元信号级别和屏幕亮度。这些信息提供了设备发生情况的整体情况。这对确保没有外部事件影响特别有用。
  • App Stats :包含有关特定应用程序的信息。使用左侧的应用程序选择窗格中排序应用程序下拉列表对应用程序列表进行排序。可以选择一个特定的应用程序来查看应用程序下拉列表的统计信息。

同时,在选择应用程序后,我们还可以选择某个具体的场景进行分析,如下图。

image.png

四、案例分析

使用battery historian进行电量分析时,通常有如下一些套路:

  1. 通过system stats 中screenon/off rate 平均亮灭屏耗电熟读可以初步确认亮屏或者灭屏耗电是否有异常。
  2. 通过选取电量值观察每格电量的消耗速度,确认耗电异常时间段和当前前台应用,网络状态,后台job等信息。
  3. 综合当前亮度,网络状态,后台job ,前台应用估算是否符合预期,确认是否当前配置环境问题,还是应用耗电异常。 

下面看几个具体的案例场景:

1,充电慢问题:查看充电电流值,确认充电电流是否符合预期。查看充电过程是否有异常job在长时间执行,如果有异常job耗电也会降低充电电流。查看对应电池温度是否有高温现象,电池温度过高会限制充电电流。

image.png

2,发热问题:通过batterystats查看当前发热情况,找到温度最高区间,综合当前网络,亮度,应用确认耗电情况是否符合预期。如耗电电流不大,但是温度确持续增加,大概率环境无法散热导致,比如太阳光直射,物品覆盖无法散热。

image.png

3,亮屏耗电问题:当出现亮屏耗电时,先检查网络状态,亮度状态,是否高耗电应用。不同网络耗电排行5G>4G>wifi,高亮下耗电会急剧增加,游戏相机场景会耗电大。
比如,下面的场景是用户反馈白天耗电快场景(4G下,高亮,加上后台GPS长时间定位)。

image.png

4,息频耗电问题:息屏场景,部分app会通过音频持锁来给自己保活。通过查看audio和wakelock状态可以确认此类问题。app频繁网络包唤醒系统(应用唤醒频次低于1min),同样也会引起耗电快。
比如,下面的场景用户反馈息屏耗电快场景:从batteryhistorian可以看到xfPlay,一直持有音频锁给自己保活,导致系统无法休眠从而息屏耗电。

image.png

5,息屏异常耗电问题:所有信息都符合预期,但是还是耗电快,此种情况可能是有异常器件漏电问题。
比如,下面的场景息屏耗电场景,唤醒周期超过2min,休眠比良好,但是耗电依旧很大。有可能是器件漏电,需要专业功耗工程师进一步分析。

image.png

  1. 电量追赶问题:当发现耗电电流超过理论值,并且无异常发热,大概率是出现了电量追赶问题。当计算出来的真实电量和实际电量有差异时,实际电量就会快速下降追赶至真实电量,表现就是30s或者60s一格电的速度去追赶。
    比如,息屏耗电场景平均耗电电流5466ma,理论手机不会出现这么大电流(。此时温度正常,大概率是出现了虚电,电量追赶问题,需要从kernel 日志进一步分析确认。

    image.png

Battery Historian图形化工具,可以非常直观查看历史耗电信息,追溯到耗电场景。对于一般用户,Battery Historian分析简单耗电问题已经足够。不过,对于更深的耗电问题,则需要更多的辅助日志或者dump 由更专业工程师进一步分析。

原文地址:滑动验证页面icon-default.png?t=N7T8https://segmentfault.com/a/1190000043378961

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第106讲:Mycat实践指南:范围分片下的水平分表详解

文章目录 1.Mycat水平拆分的分片规则2. Mycat水平拆分之范围分片2.1.使用范围分片水平分表的背景2.2.水平分表范围分片案例2.3.准备测试的表结构2.4.配置Mycat实现范围分片的水平分表2.4.1.配置Schema配置文件2.4.2.配置Rule分片规则配置文件2.4.3.配置Server配置文件2.4.4.重启…

牛客网 华为机试 取近似值

本题是要实现四舍五入。我们采用float的数据类型,因为这样数据精度更高。然后我们可以把得到的数据0.5,然后再转换成int数据类型,因为转换成int数据类型的时候是向下取整的,比如4.9转换成int就是4,4.2转换成int也是4。…

Python错题集-7:DeprecationWarning: Conversion of an array with ndim(被弃用警告)

1问题描述 DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) X[i] np.random.nor…

LCR 188. 买卖芯片的最佳时机

解题思路&#xff1a; 动态规划 方法一&#xff1a;常规解法 class Solution {public int bestTiming(int[] prices) {int n prices.length;if (n 0) return 0;int[] dp new int[n];int cost prices[0];for (int i 1; i < n; i) {cost Math.min(cost, prices[i]);dp…

Unity类银河恶魔城学习记录8-2 p78.Improving black with clone creating源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作【Unity教程】从0编程制作 Blackhole_Hotkey_Controller.cs using System.Collections; using System.Collectio…

Dell R620中文手册下载

poweredge-r620_owners-manual_zh-cn.pdf https://url20.ctfile.com/f/36743220-1030280698-8d9322?p2024 (访问密码: 2024)

为什么我建议你2024年一定要入局鸿蒙?

自去年发布现象级“爆款”手机Mate 60后&#xff0c;华为就备受关注。小灰作为一枚程序员&#xff0c;关注的重心更偏向于技术。华为手机搭载的国产自研的鸿蒙操作系统&#xff08;HarmonyOS&#xff09;&#xff0c;已经成为一个业界的里程碑&#xff0c;是我国国产技术自主化…

ChatGPT Plus 自动扣费失败,如何续订

ChatGPT Plus 自动扣费失败&#xff0c;如何续订 如果您的 ChatGPT Plus 订阅过期或扣费失败&#xff0c;本教程将指导您如何重新订阅。 本周更新 ChatGPT Plus 是一种每月20美元的订阅服务。扣费会自动进行&#xff0c;如果您的账户余额不足&#xff0c;OpenAI 将在一次扣费…

C语言写学生信息管理系统

说明:本博文来自CSDN-问答板块,题主提问。 需要:用C语言设计一个学生信息管理系统(尽量不使用指针),学生信息包括学号,姓名,数学成绩,C语言成绩,英语成绩和每个学生的总成绩这几项。系统要实现如下几个功能:1.添加学生2.删除学生3.修改学生信息4.查询学生信息5进行学…

C#,无监督的K-Medoid聚类算法(K-Medoid Algorithm)与源代码

1 K-Medoid算法 K-Medoid&#xff08;也称为围绕Medoid的划分&#xff09;算法是由Kaufman和Rousseeuw于1987年提出的。中间点可以定义为簇中的点&#xff0c;其与簇中所有其他点的相似度最小。 K-medoids聚类是一种无监督的聚类算法&#xff0c;它对未标记数据中的对象进行聚…

安装/升级 gcc

文章目录 查看当前 gcc 版本查看 yum 软件库 gcc 版本列表下载最新版本安装 查看当前 gcc 版本 查看 yum 软件库 gcc 版本列表 只有一个4.8的版本&#xff0c;过旧 下载最新版本 wget https://ftp.gnu.org/gnu/gcc/gcc-13.2.0/gcc-13.2.0.tar.gz 安装 ./configure 报错 提示…

【深圳五兴科技】Java后端面经

本文目录 写在前面试题总览1、java集合2、创建线程的方式3、对spring的理解4、Spring Boot 和传统 Spring 框架的一些区别5、springboot如何解决循环依赖6、对mybatis的理解7、缓存三兄弟8、接口响应慢的处理思路9、http的状态码 写在前面 关于这个专栏&#xff1a; 本专栏记录…

基于51单片机的电子秒表Protues仿真设计

目录 一、设计背景 二、实现功能 三、仿真结果 四、源程序 一、设计背景 随着科技的不断发展&#xff0c;电子设备在我们生活中扮演着愈加重要的角色。这些电子设备不仅使我们的生活更加便利&#xff0c;还帮助我们提高工作效率和精确度。其中&#xff0c;电子秒表是常用的计…

如何配置JDK的环境变量(简单灵活易懂)

前言&#xff1a; 开始学习java的小伙伴们一定都备一件事困扰过&#xff0c;那就是jdk的环境变量的配置&#xff0c;搞不懂为啥要配置环境变量&#xff0c;到底有啥子用&#xff1f;接下来小编带大家配置一下 配置环境变量的作用&#xff1f; Path&#xff1a;当用javac、jav…

redis 缓存击穿问题(互斥锁,逻辑过期)

1、缓存击穿问题 缓存击穿问题:一个被高并发访问并且缓存重建业务较复杂的key突然失效了&#xff0c;无数的请求访问会在瞬间给数据库带来巨大的冲击。 场景:假设线程1在查询缓存之后&#xff0c;本来应该去查询数据库&#xff0c;然后把这个数据重新加…

Java学习笔记002——类的修饰符

在Java语言中&#xff0c;类的访问修饰符决定了其它类能够访问该类的方式。类有如下4种访问修饰符&#xff0c;在创建类时用于类的声明&#xff1a; 1、public: 当一个类被声明为public时&#xff0c;它可以从任何其他类中被访问&#xff0c;无论这些类位于哪个包中。通常&am…

探索设计模式的魅力:深入解析解释器模式-学习、实现与高效使用的全指南

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;并且坚持默默的做事。 探索设计模式的魅力&#xff1a;解析解释器模式学习、实现与高效使用全指南 文章目录 一、案…

2024大厂Java面试最火问题,1200页文档笔记

前言 ⽂章有点⻓&#xff0c;请耐⼼看完&#xff0c;绝对有收获&#xff01;不想听我BB直接进⼊⾯试分享&#xff1a; 准备过程蚂蚁⾦服⾯试分享拼多多⾯试分享字节跳动⾯试分享最后总结个人所得&#xff08;供大家参考学习&#xff09; 当时我⾃⼰也准备出去看看机会&#…

2024 年广西职业院校技能大赛高职组《云计算应用》赛项赛题第 3 套

#需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; 某企业根据自身业务需求&…

工业网关、物联网网关与PLC网关是什么?

网关是什么&#xff1f; 网关是一种用于连接不同网络的网络设备&#xff0c;其作用是实现网络之间的通信和数据交换。它负责将一个网络的数据转发到另一个网络&#xff0c;并且可以进行路由、转换和过滤等处理。通常用于连接局域网和广域网之间&#xff0c;可以是硬件设备或者软…