当前位置: 首页 > article >正文

Android 常用命令和工具解析之Battery Historian

Batterystats是包含在 Android 框架中的一种工具,用于收集设备上的电池数据。您可以使用adb bugreport命令抓取日志,将收集的电池数据转储到开发机器,并生成可使用 Battery Historian 分析的报告。Battery Historian 会将报告从 Batterystats 转换为可在浏览器中查看的 HTML 可视化内容。适合的场景:

  • 显示进程从什么位置以及通过何种方式消耗电池电量
  • 识别系统为了延长电池续航时间可能会延迟甚至移除应用中的哪些任务。

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

一、Battery Historian

Battery Historian的安装可以参考:https://download.csdn.net/blog/column/11547800/108662887

其他参考:Android性能优化系列之电量优化_android 电量优化-CSDN博客

1、基本操作

但是通常企业里面基本上都搭建了,所以直接使用解析bugreport文件就行了,解析后主界面如下:

  • 右上角通常选择Battery Level,即中间会出现一根黑线,那根黑线就是剩余电量
  • 左侧纵轴为一些比较关键的字段,把鼠标移动到上面会自动显示相关说明
  • 底部横轴为时间线,可以通过鼠标轮滑来放大和缩小,且时间比较精准

1.1 CPU running

表示设备上 CPU 处于活动状态(非休眠状态)的时间。这是指 CPU 在处理各种任务时所花费的时间,包括应用程序的执行、系统服务的处理以及其他系统任务。CPU running 时间通常用于衡量设备在特定时间段内的活动水平,以便评估设备的能耗情况。

如上图表示CPU持续运行了45小时,所以这里的CPU running还并不像性能分析里面的轮询片段

1.2 App Processor wakeup

在 Battery Historian 中,App Processor wakeup 表示应用处理器(通常是设备上的主 CPU)从睡眠状态唤醒的次数。当应用处理器从睡眠状态唤醒时,它需要消耗额外的电量来执行任务,这可能会导致设备的电池消耗增加。

App Processor wakeup 是一个重要的指标,用于衡量应用程序或系统活动导致应用处理器频繁唤醒的情况。频繁的唤醒事件可能表明有一些应用程序或系统服务在不必要地唤醒设备,从而导致电池消耗增加。这可能是由于应用程序执行了过多的后台任务、使用了不当的定时器或触发器,或者存在其他导致设备频繁唤醒的问题。

个人理解此字段表示应用进程被唤醒的次数,当然这里的应用进程可能是前台进程也可能是后台进程。

如上图表示此时间点wisemine应用被唤醒一次,但是注意如果缩短时间轴,他会把相近的几次组合,即如上三个点表示三次被唤醒,合在一起如下:

Bugreport保存此字段的原理可以参考BugReport中的App Processor wakeup字段意义-CSDN博客

1.3 Kernel only uptime

在 Battery Historian 中,Kernel only uptime 表示设备的内核(Kernel)仅处于运行状态而不是睡眠状态的时间。内核是操作系统的核心组件,负责管理系统资源、处理任务调度、驱动设备等。当内核处于运行状态时,设备通常会消耗更多的电量。

Kernel only uptime 是一个重要的指标,用于了解设备内核在特定时间段内的活动水平。较长的 Kernel only uptime 可能表明设备的内核在处理各种系统任务时一直处于活动状态,这可能会导致额外的能源消耗,影响设备的电池寿命。

1.4 Userspace wakelock

1.5 Long Wakelocks

1.6 Screen

通过监视 Battery Historian 中的 "Screen" 数据,用户可以了解设备屏幕的使用情况,包括屏幕开启时长、亮度变化等信息。这有助于用户评估自己的屏幕使用习惯,以及了解哪些应用程序或活动可能导致屏幕开启时间过长,从而影响设备的电池寿命。

如上图红色表示屏幕是亮起来的,白色表示屏幕没有亮起来,放大时间轴之后能够清晰的得到屏幕亮起来的原因和时长:

1.7 Top app

在 Battery Historian 中,"Top app" 表示在特定时间段内消耗最多电量的应用程序。这个指标可以帮助用户和开发人员了解哪些应用程序在设备上消耗了大量的电量,从而帮助他们识别可能导致电池耗尽的应用程序或活动。

通过监视 Battery Historian 中的 "Top app" 数据,用户可以查看哪些应用程序在特定时间段内使用了大量的电量。这有助于用户优化其应用程序使用习惯,可能会减少对电量消耗较高的应用程序的使用,或者寻找更节能的替代方案。

如上图表示在此时间点最活跃的几个应用,按照持续时间排名,放大时间轴会发现,这里同样会被合并:

PS:此项如果以点的形式表现通常没有太大的意义,可能是待机状态下突然亮屏,或者某个应用突然启动起来;但是如果持续时间很长,就能够证实对应的应用可能存在异常,因为持续很长时间在持续耗电。

1.8 Foreground process

在 Battery Historian 中,"Foreground process" 表示在设备上处于前台运行状态的进程或应用程序。前台进程通常是用户当前正在与之交互的应用程序,因为用户正在使用这些应用程序,它们通常会占用更多的系统资源,包括 CPU、内存和电量。

这个是指的前台进程,表示当前在设备上处于前台运行状态的进程或应用程序。这些是用户当前正在与之交互的应用程序,它们通常会占用更多的系统资源和电量。但是top app不一样,他无法指示对应应用在后台一直运行或者一直占用系统资源,他只能说明当时他瞬间消耗的电流比较高而已。

如上表示对应的三个进程一直在占用系统资源,持续45小时

值得注意的是,如果状态有所改变,Historian会自动区分颜色

1.9 JobScheduler

在 Battery Historian 中,"JobScheduler" 是指 Android 系统中的一个调度器,用于在设备空闲时执行后台任务。JobScheduler 允许应用程序安排需要在后台执行的作业或任务,以便在系统资源可用时进行处理,从而提高电量效率和系统性能。

通过使用 JobScheduler,开发人员可以利用系统优化功能,将多个后台任务聚合在一起执行,从而减少设备唤醒次数,节省电量并减少对系统资源的占用。这有助于避免应用程序在不必要的时候频繁唤醒设备,从而提高设备的电池寿命。

PS:即JobSchedule的宗旨就是把一些不是特别紧急的任务放到更合适的时机批量处理。但是感觉他对日常分析好像没有什么太大的作用?

1.10 Activity Manager Proc

在 Battery Historian 中,"Activity Manager Proc" 是指 Android 系统中的一个关键组件,用于管理应用程序进程和活动。Activity Manager Proc 负责跟踪和管理应用程序的进程生命周期、活动状态以及与系统资源的交互。

通过监视 Activity Manager Proc 数据,可以了解应用程序在设备上的运行情况,包括其进程的创建、销毁、活动状态的变化等。这些信息对于分析应用程序的性能、资源利用情况以及对设备电量消耗的影响非常重要。

如上截图,红色的表示对应进程死亡的瞬间,绿色表示对应进程被启动

同样如果时间轴比较小,他会把这些圆点进行组合

1.11 AM Low Memory / ANR

"AM Low Memory" 表示 Android 系统的 Activity Manager 在低内存条件下的一种状态。在这种情况下,系统可能会采取一些措施来释放内存,例如终止一些后台进程、清理缓存等,以确保系统的稳定性和性能。

其中"Num Process" 的数值表示在低内存条件下 Activity Manager 监视的当前进程数量。这个指标可以帮助开发人员了解系统在低内存状态下所管理的进程数量,以及系统在释放内存时可能终止的进程数量。

2、案例分析

2.1 应用持锁导致无法息屏

如上截图前面5个小时屏幕一直常亮,无法息屏

Userspace wakelock和Foreground process可以看出DECT应用持锁持续五个小时,导致无法正常息屏

2.2 应用任务导致耗电模块持续运行

如上截图可以看出45小时一直在通话过程中,后续GPS频繁启动和扫描,让设备退出深度睡眠模式

后确定和这两个应用有关系。

2.3 WIFI信号不好导致功耗高

如上截图wifi信号poor,表示信号相当不好,会增加wifi模块的耗电量

2.4 无法深度睡眠导致功耗高

如上截图Doze一直为黄色,即浅度休眠,导致后台应用频繁被唤起,后了解到此项目关闭了深度睡眠


http://www.kler.cn/a/533581.html

相关文章:

  • 21.2.2 保存
  • 离散时间傅里叶变换(DTFT)公式详解:周期性与连续性剖析
  • 动态图推理问答算法
  • ubuntu 网络管理--wpa_supplicant、udhcpc
  • 从Transformer到世界模型:AGI核心架构演进
  • pytorch使用SVM实现文本分类
  • 基于HTML生成网页有什么优势
  • Java—不可变集合
  • 最新黑马商城运行问题解决
  • 优化数据库结构
  • 服务器安装了esxi,通过esxi创建了N个虚拟机,如何实现类似于阿里云或者腾讯云的类似的云端管理虚拟机监控虚拟机的系统,要求开源,中文界面
  • 【Block总结】MDCR,多尺度深度可分离卷积,捕捉不同感受野范围的空间特征
  • LabVIEW图像采集与应变场测量系统
  • 【算法】动态规划专题③ ——二维DP python
  • 【PromptCoder + Bolt.new】Cascade模式自动生成页面和对应的路由
  • 10.单例模式 (Singleton Pattern)
  • 防火墙策略
  • react的antd表格数据回显在form表单中
  • 2024 TCSVT: LS2T2NN
  • 深入解析 Chrome 浏览器的多进程架构:标签页是进程还是线程?(中英双语)
  • 20250205——Windows系统基于ollama的DeepSeek-R1本地安装
  • 备战蓝桥杯-并查集
  • 【力扣】54.螺旋矩阵
  • PyQt6/PySide6 的 QMainWindow 类
  • 数据传输-工作习惯问题
  • CNN的各种知识点(五):平均精度均值(mean Average Precision, mAP)