修改源码对应用耗电量进行监控
前言
现在手机中虽然都有电量统计,但是并不能对应用的耗电信息进行实时监控,要想知道某些应用在前后台的耗电变化,还是很困难的。故这里打几个桩,实现应用耗电量的监控。
一、电量相关类
在AOSP Androdi-9.0.0中与电量相关的几个类:
1 BatteryService:负责监听充电状态和电量变化。
2 BattteryStatsService:负责电池信息的收集,以及各个部分耗电量的统计。
3 BatteryStatsImpl:BattteryStatsService类的委托类,BattteryStatsService类的所有操作都交给它去完成。
4 BatteryStatsHelper:计算各个应用和服务的电量使用情况,其利用BattteryStatsService中统计的时长和电源配置文件中的功耗配置值,通过计算得到耗电信息。
5 PowerProfile:负责解析电源配置文件。
6 BatterySipper:用来存放应用、系统服务、硬件的耗电信息。
其中BatteryStatsHelper类中有一个关键函数refreshStats,该函数会刷新当前的耗电量统计,也就是说,每次调用该函数,都会刷新当前手机中的耗电量信息。refreshStats函数中是通过调用processAppUsage函数来完成应用的耗电量统计。processAppUsage函数是以应用的UID为单位,对应用进行耗电量统计,每个应用的耗电量数据都保存在BatterySipper对象中,并将BatterySipper对象统一保存在mUsageList变量中。
二、实现方案
本方案的实现主要要做两件事:遍历统计后的耗电量和循环刷新当前耗电量信息
要完成遍历耗电量,只需在完成应用耗电量统计之后,遍历mUsageList变量,即可获得当次刷新的应用耗电量统计。本方案是在BatteryStatsHelper类的processAppUsage函数的结尾处插入代码,遍历mUsageList对象,取出各应用耗电量的存储对象BatterySipper,然后在BatterySipper中取出耗电量的统计值totalPowerMah,并输出耗电量信息:
现在还有一个问题,那就是如何进行耗电量的循环刷新。正常情况下,只有在用户点击手机中设置功能的电池电量信息,才会触发一次耗电量的统计。那要想进行耗电量的持续监控,就必须要让系统进行持续的耗电量刷新才能完成。本方案中采用的方法是,在初始化BatteryStatsHelper类时,创建一个线程,每10秒刷新一次耗电量信息。由于BatteryStatsHelper是在BatteryUtils类的initBatteryStatsHelper函数中进行初始化的,故就在initBatteryStatsHelper函数中插入线程。这样,只需查看一次电池电量信息,就能激活刷新线程,每10秒输出一次电量信息:
本方案采取的是以Log的形式将应用的UID和耗电量输出在控制台。每个应用安装在手机之后,会被分配一个固定的UID,通过UID可以区分不同的应用的耗电量:
python写个工具,对Log中输出的数据进行统计,并excel绘制表格并制图为如下:
谁在耗电,一目了然
修改源码对应用耗电量进行监控相关推荐
- mybatis-generator修改源码2
参考: MyBatis Generator系列(三)----修改源码实现中文注释 (包括java.net.MalformedURLException at java.net.URL.<init& ...
- android注入 定位,[原创]修改源码实现全局(无需root)注入躲开注入检测
看这篇文章需要的技能 1.会编译android源码(如果你不愿意编译源码,还有另外一种办法,下面我会提供) 2.会使用substrate或者xposed 以上2个网上资料很多我就不啰嗦了 一.市面上目 ...
- Python 技术篇 - 修改源码解决中文主机名导致的flask、socket服务起不来问题: ‘utf-8‘ codec can‘t decode byte 0xc0 in position...
由于主机名为中文导致的 flask 服务起不来,报错如下: File "D:\work\python3.9_64\lib\socket.py", line 791, in getf ...
- Jar包反编译后修改源码再编译
Jar包反编译后修改源码再编译 文章目录 Jar包反编译后修改源码再编译 1. 场景 2. 详细步骤 2.1 查看源码 2.2 生成源文件 2.3 构建项目 2.4 编译成jar包 3. 参考链接 1 ...
- 2022.7.2新版码易支付源码+三网免签挂+APP监控在线更新
2022.7.2新版码易支付源码+三网免签挂+APP监控在线更新 新版三网免签易支付系统源码,支持QQ/微信/支付宝三网免输入码支付源码,支持云端免挂直接用宝塔的计划任务监控即可,支持APP监控本地挂 ...
- FFmpeg修改源码支持H265
文章目录 一. 安装FFmpeg 二. 下载源码 三. 修改源码 四. 重新编译 五.执行 一. 安装FFmpeg 如果已经安装,建议先卸载. brew uninstall ffmpeg 然后用以下命 ...
- caffe实现多label输入(修改源码版)
在我的上一篇博客中caffe实现多标签输入中,介绍了用把图像和label分来,各自做成lmdb,最后把label的lmdb用slice层分开,这篇博客介绍另一种修改源码的方法实现多label,比其他博 ...
- 百度离线地图API2.0 百度离线地图api,已经修改源码
百度离线地图API2.0 百度离线地图api,已经修改源码,绕过服务端验证,除了路书等需要服务端数据支持的功能外,其余功能已经全部实现,包括常用的:地图示例.地图控件添加.覆盖物添加.信息窗口展示等等 ...
- 修改matlab fig,matlab只修改fig图形属性不修改源码的方法
matlab是一款数学软件,主要被应用在数据可视化以及分析计算中,它支持我们使用多种数据计算模式.我们经常会使用它来进行数据的可视化制作,因此就会产生一些fig图形,这些图形的属性都是默认生成的,因此 ...
最新文章
- 深入了解Brackets编辑器 [好东西啊]
- flink sql udf jar包_flink教程flink 1.11 集成zeppelin实现简易实时计算平台
- 从字节码角度解释i++和++i
- [Jarvis OJ - PWN]——[XMAN]level2(x64)
- (转)网络流-最大流 SAP算法(模板)
- 十二个 ASP.NET Core 例子
- java本地创建zk节点
- C++——析构函数为什么要为虚函数
- java蓝桥杯算法训练 求1000以内的完数(题解)
- android设计风格是什么软件下载,基于MaterialDesign设计风格的妹纸app的简单实现
- Excel练习线性回归
- 每日单词20110605
- win7计算机里的桌面不见了怎么办,win7桌面图标不见了怎么办,教您解决win7桌面图标不见了...
- 2007年在职攻读硕士学位全国联考
- SQL server中模式的定义和删除
- 金融危机下窗帘选购秘籍
- Java 实现word、excel、ppt、txt等办公文件在线预览功能!
- oracle ebs ar 表,EBS AR 模块常用表
- 干货来袭!手动搭建高可用的Redis5-0分片集群
- Windows操作系统+朝鲜红星+国产麒麟+红旗+渗透专用系统+Oracle专用+技术专栏【资源大合集】 | 寻找C站宝藏
热门文章
- HTML中 css红绿黄灯,纯CSS实现红绿灯效果(面试常见)
- QMosaic、MCM智拼图、ENVI匀色镶嵌对比
- MySQL初级练习题
- html默认字体是什么,Windows 系统的默认字体是什么?应用的默认字体是什么?
- 输电线路智能综合驱鸟器
- linux 内核配置lcd,Linux-2.6.32.2内核在mini2440上的移植---添加LCD背光驱动
- 小程序毕设作品之微信电子书阅读小程序毕业设计(4)开题报告
- vulfocus——discuz命令执行(wooyun-2010-080723)
- 使用 Amazon Pricing Calculator 在亚马逊云科技中国区域估算云使用成本
- 单片机节日彩灯实训报告_单片机(节日彩灯控制).doc