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 监视的当前进程数量。这个指标可以帮助开发人员了解系统在低内存状态下所管理的进程数量,以及系统在释放内存时可能终止的进程数量。

1.12 Doze

"Doze" 表示设备的省电模式。省电模式是 Android 系统提供的一种功能,旨在延长设备的电池寿命,通过限制应用程序的后台活动来减少电量消耗。以下是 "Doze" 中常见的三种状态及其含义:

  • Doze Off:表示设备的省电模式已关闭,设备未进入任何省电模式。在 Doze Off 状态下,设备不会应用省电模式的限制,应用程序可以自由运行而不受 Doze 模式的影响。
  • Light Doze:表示设备处于轻度睡眠模式。在 Light Doze 状态下,系统会限制某些后台活动以节省电量,但仍允许应用程序在一定程度上保持活动状态。
  • Full Doze:表示设备处于深度睡眠模式。在 Full Doze 状态下,系统会极大限制应用程序的后台活动,包括网络访问和同步操作,以最大程度地减少电量消耗。

通常为了降低功耗,我们希望要求设备在禁止待机状态下更多的处于深度睡眠模式,即PMS原生逻辑在禁止状态没有任何输入和用户锁的情况下,是否能够进入浅度睡眠模式?进入之后又会有一些条件判断是否能够进入深度睡眠模式?进入深度睡眠模式之后后台被限制,后台网络同步操作将在一个固定的周期时间点触发,这样大大节约功耗。如果去掉Full Doze模式,那么后台任务将会频繁被唤起,大大提升功耗,可以参考后面案例。

1.13 Phone state

‌在Battery Historian中,Phone state表示手机通话状态,包括是否正在通话、接听来电、拨出电话

  • "in":表示设备处于通话状态,即设备正在进行电话通话或有电话呼入的状态。
  • "out":表示设备处于拨打电话状态,即设备正在拨打电话。
  • "off":表示设备处于电话关闭状态,即设备的电话功能处于关闭状态,没有电话呼入或呼出的情况

这些不同的状态可以帮助开发人员更好地了解设备在电话功能方面的运行状态,有助于诊断和解决与通信功能相关的问题。

如上截图可以了解到黑色的in表示当前设备正在通话中,黄色的out表示当前设备正在拨打电话

1.14 Phone scanning

在 bugreport 中,"Phone scanning" 表示设备正在进行电话扫描的操作。电话扫描是指设备在搜索可用的移动网络信号或其他通信信号的过程。这个信息可以帮助开发人员了解设备在扫描网络信号方面的状态。

  • "off":表示电话扫描功能处于关闭状态,即设备当前未在进行网络信号的扫描。
  • "on":表示电话扫描功能处于开启状态,即设备正在主动进行网络信号的扫描,以便连接到可用的网络信号。

1.15 Network connectivity

Network connectivity表示网络连接类型,总共如下几种类型,我们接触多的通常WIFI/MOBLE/VPN分别表示当前使用的wifi网络/移动网络/VPN网络

有时候可能同时使用了几种网络,如下图就会换一种颜色来表示,鼠标放到上面有详细的列表显示当前使用的网络类型

1.16 Mobile signal strength/Wifi signal strength

Mobile signal strength表示移动数据信号是否稳定,白色为none表示没有开启移动网络,黄色为good表示网络比较好,poor就表示网络比较差,这种情况下就越耗电

Wifi signal strength表示wifi信号是否稳定,同上在poor就表示当前wifi信号不稳定,这种情况下会持续耗电

1.17 Wifi scan/Wifi on/Wifi radio

Wifi ON表示当前时间段wifi功能是否打开,和settings菜单里面的wifi开关一致

Wifi radio表示当前时间段wifi硬件是否处于激活状态,注意和wifi功能进行区分

Wifi scan表示当前时间段wifi模块有没有进行wifi扫描,通常wifi扫描越频繁就越耗电

1.18 Wifi supplicant

在 Android 系统中,bugreport 是一个用于收集设备信息、日志和其他诊断数据的工具。在 bugreport 报告中,"Wifi supplicant" 是指与 Wi-Fi 连接相关的组件,该组件负责处理设备与 Wi-Fi 网络之间的通信。以下是 "Wifi supplicant" 在 bugreport 中可能出现的一些值以及它们的含义:

  • SCANNING:表示 Wi-Fi supplicant 正在扫描可用的 Wi-Fi 网络。在这种状态下,设备正在搜索可用的 Wi-Fi 热点。
  • ASSOCIATING:表示设备正在尝试与选定的 Wi-Fi 网络建立连接。在这个阶段,设备正在与 Wi-Fi 热点进行握手和认证过程。
  • ASSOCIATED:表示设备已经成功与 Wi-Fi 网络建立连接。设备与 Wi-Fi 网络之间已经建立了通信通道。
  • AUTHENTICATING:表示设备正在进行 Wi-Fi 网络的认证过程。在这个阶段,设备正在验证其身份以获得对 Wi-Fi 网络的访问权限。
  • COMPLETED:表示设备已成功连接到 Wi-Fi 网络并已准备好进行数据传输。
  • DISCONNECTED:表示设备与 Wi-Fi 网络的连接已断开。这可能是由于信号弱、网络故障或用户手动断开连接等原因导致的。

这些状态可能同时存在,但是状态存在改变的时候,颜色肯定会不一样,如下:

1.19 GPS/Sensor

Sensor和GPS的值都是on和off,on表示该模块处于开启工作状态

1.20 Coulomb charge/Battery Level/Temperature

Coulomb charge表示设备的电荷状态,描述电池的充电量或放电量;看起来单位是mAh,并随着剩余电量的降低,这个值越小,颜色越淡,它和Battery Level成正比

Battery Level表示当前剩余电量的百分比,从密集程度可以了解到好点是否均匀,它和电池曲线存在一些关联

Temperature表示设备当前温度,颜色越深说明温度越高

2、案例分析

2.1 应用持锁导致无法息屏

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

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

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

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

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

2.3 WIFI信号不好导致功耗高

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode刷题日记 1

https://leetcode.cn/problems/decode-ways/description/ 题目分析 分析了一下题目,我的第一想法:和之前的上楼梯问题很像 为什么这么说呢,感觉他们的值和他们之前元素都有千丝万缕的联系 就像上楼梯问题 就是我们的dp问题 怎么解释呢&a…

初阶数据结构:树---堆

目录 一、树的概念 二、树的构成 (一)、树的基本组成成分 (二)、树的实现方法 三、树的特殊结构------二叉树 (一)、二叉树的概念 (二)、二叉树的性质 (三&#…

学习笔记:机器学习中的数学原理(一)

1. 集合 集合分为有限集和无限集; 对于有限集,两集合元素数相等即为等势; 对于无限集,两集合元素存在一一映射关系即为等势; 无限集根据是否与正整数集等势分为可数集和不可数集。 2. sigmoid函数(也叫…

音频进阶学习十一——离散傅里叶级数DFS

文章目录 前言一、傅里叶级数1.定义2.周期信号序列3.表达式DFSIDFS参数含义 4.DFS公式解析1)右边解析 T T T、 f f f、 ω \omega ω的关系求和公式N的释义求和公式K的释义 e j ( − 2 π k n N ) e^{j(\frac{-2\pi kn}{N})} ej(N−2πkn​)的释义 ∑ n 0 N − 1 e…

互联网分布式ID解决方案

业界实现方案 1. 基于UUID 2. 基于DB数据库多种模式(自增主键、segment) 3. 基于Redis 4. 基于ZK、ETCD 5. 基于SnowFlake 6. 美团Leaf(DB-Segment、zkSnowFlake) 7. 百度uid-generator() 基于UUID生成唯一ID UUID生成策略 推荐阅读 DDD领域驱动与微服务架构设计设计模…

BUU28 [GXYCTF2019]BabySQli1

常规万能密码,发现登不上去 过滤掉了or,,当尝试了n种方法以后,最关键的是发现()居然也被过滤了 哈哈,那玩个淡, 再搜wp!! 当输入admin的时候,提示密码错误&#xff0…

数据分析:企业数字化转型的金钥匙

引言:数字化浪潮下的数据金矿 在数字化浪潮席卷全球的背景下,有研究表明,只有不到30%的企业能够充分利用手中掌握的数据,这是否让人深思?数据已然成为企业最为宝贵的资产之一。然而,企业是否真正准备好从数…

git SourceTree 使用

Source Tree 使用原理 文件的状态 创建仓库和提交 验证 再克隆的时候发发现一个问题,就是有一个 这个验证,起始很简单 就是 gitee 的账号和密码,但是要搞清楚的是账号不是名称,我之前一直再使用名称登录老是出问题 这个很简单的…

485网关数据收发测试

目录 1.UDP SERVER数据收发测试 使用产品: || ZQWL-GW1600NM 产品||【智嵌物联】智能网关型串口服务器 1.UDP SERVER数据收发测试 A(TX)连接RX B(RX)连接TX 打开1个网络调试助手,模拟用户的UDP客户端设…

xinference 安装(http导致错误解决)

为什么要使用xinference 安装xinference 环境 1)conda create -n Xinference python3.11 注意:3.9 3.10均可能出现xinference 安装时候出现numpy兼容性,以及无法安装all版本 错误: error while attempting to bind on address&am…

路由器如何进行数据包转发?

路由器进行数据包转发的过程是网络通信的核心之一,主要涉及以下几个步骤: 接收数据包:当一个数据包到达路由器的一个接口时,它首先被暂时存储在该接口的缓冲区中。 解析目标地址:路由器会检查数据包中的目标IP地址。…

集合类不安全问题

ArrayList不是线程安全类,在多线程同时写的情况下,会抛出java.util.ConcurrentModificationException异常 解决办法: 1.使用Vector(ArrayList所有方法加synchronized,太重) 2.使用Collections.synchronized…

Windows Docker笔记-安装docker

安装环境 操作系统:Windows 11 家庭中文版 docker版本:Docker Desktop version: 4.36.0 (175267) 注意: Docker Desktop 支持以下Windows操作系统: 支持的版本:Windows 10(家庭版、专业版、企业版、教育…

docker /var/lib/docker/overlay2目录把磁盘空间占满问题

1、查看服务器磁盘空间 df -h果然100%了,docker系统文件把磁盘空间占满了。 2、进入overlay2目录,查找那个容器工作目录占用最高 cd /var/lib/docker/overlay2du -h --max-depth1详见下图 好家伙占用110G!复制目录名称2c3c48ccac533c5d4a366d45a19bb9…

【python】简单的flask做页面。一组字母组成的所有单词。这里的输入是一组字母,而输出是所有可能得字母组成的单词列表

目录结构如下: . ├── static │ ├── css │ │ └── styles.css │ └── js │ └── scripts.js ├── templates │ ├── base.html │ ├── case_converter.html │ ├── index.html │ └── word_finder.html ├── app.py ├── tree.py…

吴恩达深度学习——卷积神经网络实例分析

内容来自https://www.bilibili.com/video/BV1FT4y1E74V,仅为本人学习所用。 文章目录 LeNet-5AlexNetVGG-16ResNets残差块 1*1卷积 LeNet-5 输入层:输入为一张尺寸是 32 32 1 32321 32321的图像,其中 32 32 3232 3232是图像的长和宽&…

利用 IMU 估计人体关节轴向和位置 —— 论文推导

Title: 利用 IMU 估计人体关节轴向和位置 —— “Joint axis and position estimation from inertial measurement data by exploiting kinematic constraints” —— 论文推导 文章目录 I. 论文回顾II. 铰接关节的约束1. 铰接关节约束的原理2. 铰接关节约束的梯度3. 铰接关节约…

oracle ORA-27054报错处理

现象 在oracle执行expdp,rman备份,xtts的时候,由于没有足够的本地空间,只能使用到NFS的文件系统但有时候会出现如下报错 ORA-27054: NFS file system where the file is created or resides is not mounted with correct options根据提示信…

python模拟键盘输入(可视化界操作面)

因为受到一些限制,无法在输入框进行文本的复制粘贴,这时我们便需要模拟键盘输入一些文本内容,话不多说,直接上干货(文末附成品工具,需要自取,操作简单无脑,工具功能:将粘…

k8s部署go-fastdfs

前置环境:已部署k8s集群,ip地址为 192.168.10.1~192.168.10.5,总共5台机器。 1. 创建provisioner制备器(如果已存在,则不需要) 制备器的具体部署方式可参考我的上一篇文章: k8s部署rabbitmq-CSDN博客文章浏览阅读254次,点赞3次,收藏5次。k8s部署rabbitmqhttps://blo…