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.rhkb.cn/news/13112.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何安装PHP依赖库 更新2025.2.3

要在PHP项目中安装依赖,首先需要确保你的系统已经安装了Composer。Composer是PHP的依赖管理工具,它允许你声明项目所需的库,并管理它们。以下是如何安装Composer和在PHP项目中安装依赖的步骤: 一. 安装Composer 对于Windows用户…

DeepSeek各版本说明与优缺点分析

DeepSeek各版本说明与优缺点分析 DeepSeek是最近人工智能领域备受瞩目的一个语言模型系列,其在不同版本的发布过程中,逐步加强了对多种任务的处理能力。本文将详细介绍DeepSeek的各版本,从版本的发布时间、特点、优势以及不足之处&#xff0…

【机器学习与数据挖掘实战】案例11:基于灰色预测和SVR的企业所得税预测分析

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支,专注于让计算机系统通过数据学习和改进。它利用统计和计算方法,使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数据集中发现模式、关联…

InnoDB和MyISAM的比较、水平切分和垂直切分、主从复制中涉及的三个线程、主从同步的延迟产生和解决

InnoDB和MyISAM的比较 事务支持: InnoDB支持:支持事务 (ACID 属性)。支持 Commit、Rollback 和 Savepoint 操作。适合需要事务处理的应用,例如银行系统。MyISAM:不支持事务。每次操作都是自动提交,不能回滚或中止。适合对事务要求…

【免费】2007-2019年各省科技支出占一般公共预算支出的比重数据

2007-2019年各省科技支出占一般公共预算支出的比重数据 1、时间:2007-2019年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区名称、年份、科技支出占一般公共预算支出的比重 4、范围:31省 5、指标解释&#xff1a…

tkvue 入门,像写html一样写tkinter

介绍 没有官网&#xff0c;只有例子 安装 像写vue 一样写tkinter 代码 pip install tkvue作者博客 修改样式 import tkvue import tkinter.ttk as ttktkvue.configure_tk(theme"clam")class RootDialog(tkvue.Component):template """ <Top…

哪些专业跟FPGA有关?

FPGA产业作为近几年新兴的技术领域&#xff0c;薪资高、待遇好&#xff0c;吸引了大量的求职者。特别是对于毕业生&#xff0c;FPGA领域的岗位需求供不应求。那么&#xff0c;哪些专业和FPGA相关呢&#xff1f; 哪些专业跟FPGA有关&#xff1f; 微电子学与固体电子学、微电子科…

pytorch实现门控循环单元 (GRU)

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 特性GRULSTM计算效率更快&#xff0c;参数更少相对较慢&#xff0c;参数更多结构复杂度只有两个门&#xff08;更新门和重置门&#xff09;三个门&#xff08;输入门、遗忘门、输出门&#xff09;处理长时依赖一般适…

【大数据技术】搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn)

搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn) jdk-8u361-linux-x64.tarhadoop-3.3.6.tar.gz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群Hadoop+MapReduce+Yarn的详细步骤。 注意: 统一约定将软件安装包存放…

移动机器人规划控制入门与实践:基于navigation2 学习笔记(一)

课程实践: (1)手写A*代码并且调试,总结优缺点 (2)基于Gazebo仿真,完成给定机器人在给定地图中的导航调试 (3)使用Groot设计自己的导航行为树 掌握一门技术 规划控制概述 常见移动机器人

两种文件类型(pdf/图片)打印A4半张纸方法

环境:windows10、Adobe Reader XI v11.0.23 Pdf: 1.把内容由横排变为纵排&#xff1a; 2.点击打印按钮&#xff1a; 3.选择打印页范围和多页&#xff1a; 4.内容打印在纸张上部 图片&#xff1a; 1.右键图片点击打印&#xff1a; 2.选择打印类型&#xff1a; 3.打印配置&am…

JS-对象-BOM

BOM 概念:Browser Object Model 浏览器对象模型&#xff0c;允许|avaScript与浏览器对话&#xff0c;JavaScript 将浏览器的各个组成部分封装为对象 组成: Window : 浏览器窗口对象 Navigator : 浏览器对象 Screen : 屏幕对象 History : 历史…

Pytest+selenium UI自动化测试实战实例

今天来说说pytest吧&#xff0c;经过几周的时间学习&#xff0c;有收获也有疑惑&#xff0c;总之最后还是搞个小项目出来证明自己的努力不没有白费。 环境准备 1 确保您已经安装了python3.x 2 配置python3pycharmselenium2开发环境 3 安装pytest库pip install p…

Linux中的基本指令(二)

一、移动和重命名指令mv 1.1基本作用及使用规范 基本作用是进行文件的移动和重命名&#xff0c;使用规范如&#xff1a; mv src[目录/文件]dst[路径/文件] 回车 1.2三种不同的作用 通过在src部分和dst部分写入不同的内容&#xff0c;来实现文件的移动和重命名的等不同功能…

Redis背景介绍

⭐️前言⭐️ 本文主要做Redis相关背景介绍&#xff0c;包括核心能力、重要特性和使用场景。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f349;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留言 &#x1f349;博客中涉及源码及博主…

【高阶数据结构(一)】:LRU Cache

LRU Cache 一、LRU Cache概念二、LRU Cache的实现三、实现 一、LRU Cache概念 LRU&#xff08;Least Recently Used&#xff09;最近最少使用&#xff0c;是一种cache替换算法。Cache的容量是优先的&#xff0c;当容量达到上限时&#xff0c;如果还有新的数据需要插入&#xff…

R语言 | 使用 ComplexHeatmap 绘制热图,分区并给对角线分区加黑边框

目的&#xff1a;画热图&#xff0c;分区&#xff0c;给对角线分区添加黑色边框 建议直接看0和4。 0. 准备数据 # 安装并加载必要的包 #install.packages("ComplexHeatmap") # 如果尚未安装 library(ComplexHeatmap)# 使用 iris 数据集 #data(iris)# 选择数值列&a…

[数据结构] 线性表和顺序表

目录 线性表 顺序表的实现 顺序表各个方法的实现 boolean isFull() -- 判断数组是否放满 : void add(int data) -- 在数组末尾插入新元素 : void add(int pos,int data) -- 在指定位置插入元素 : boolean contain(int toFind) -- 判断是否包含某个元素 int indexOf(in…

虚幻UE5手机安卓Android Studio开发设置2025

一、下载Android Studio历史版本 步骤1&#xff1a;虚幻4.27、5.0、5.1、5.2官方要求Andrd Studio 4.0版本&#xff1b; 5.3、5.4、5.5官方要求的版本为Android Studio Flamingo | 2022.2.1 Patch 2 May 24, 2023 虚幻官网查看对应Andrd Studiob下载版本&#xff1a; https:/…

导入了fastjson2的依赖,但却无法使用相关API的解决方案

今天遇到了一个特别奇怪的问题&#xff0c;跟着视频敲代码&#xff0c;视频中用到了一个将JSON字符串转为对象的 API&#xff0c;需要引入alibaba的fastjson2相关依赖&#xff0c;我引入的依赖跟视频一样。 <!--视频中给的相关依赖 --> <dependency><groupId&g…