前言

现在手机中虽然都有电量统计,但是并不能对应用的耗电信息进行实时监控,要想知道某些应用在前后台的耗电变化,还是很困难的。故这里打几个桩,实现应用耗电量的监控。

一、电量相关类

在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绘制表格并制图为如下:

谁在耗电,一目了然

修改源码对应用耗电量进行监控相关推荐

  1. mybatis-generator修改源码2

    参考: MyBatis Generator系列(三)----修改源码实现中文注释 (包括java.net.MalformedURLException at java.net.URL.<init& ...

  2. android注入 定位,[原创]修改源码实现全局(无需root)注入躲开注入检测

    看这篇文章需要的技能 1.会编译android源码(如果你不愿意编译源码,还有另外一种办法,下面我会提供) 2.会使用substrate或者xposed 以上2个网上资料很多我就不啰嗦了 一.市面上目 ...

  3. 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 ...

  4. Jar包反编译后修改源码再编译

    Jar包反编译后修改源码再编译 文章目录 Jar包反编译后修改源码再编译 1. 场景 2. 详细步骤 2.1 查看源码 2.2 生成源文件 2.3 构建项目 2.4 编译成jar包 3. 参考链接 1 ...

  5. 2022.7.2新版码易支付源码+三网免签挂+APP监控在线更新

    2022.7.2新版码易支付源码+三网免签挂+APP监控在线更新 新版三网免签易支付系统源码,支持QQ/微信/支付宝三网免输入码支付源码,支持云端免挂直接用宝塔的计划任务监控即可,支持APP监控本地挂 ...

  6. FFmpeg修改源码支持H265

    文章目录 一. 安装FFmpeg 二. 下载源码 三. 修改源码 四. 重新编译 五.执行 一. 安装FFmpeg 如果已经安装,建议先卸载. brew uninstall ffmpeg 然后用以下命 ...

  7. caffe实现多label输入(修改源码版)

    在我的上一篇博客中caffe实现多标签输入中,介绍了用把图像和label分来,各自做成lmdb,最后把label的lmdb用slice层分开,这篇博客介绍另一种修改源码的方法实现多label,比其他博 ...

  8. 百度离线地图API2.0 百度离线地图api,已经修改源码

    百度离线地图API2.0 百度离线地图api,已经修改源码,绕过服务端验证,除了路书等需要服务端数据支持的功能外,其余功能已经全部实现,包括常用的:地图示例.地图控件添加.覆盖物添加.信息窗口展示等等 ...

  9. 修改matlab fig,matlab只修改fig图形属性不修改源码的方法

    matlab是一款数学软件,主要被应用在数据可视化以及分析计算中,它支持我们使用多种数据计算模式.我们经常会使用它来进行数据的可视化制作,因此就会产生一些fig图形,这些图形的属性都是默认生成的,因此 ...

最新文章

  1. 深入了解Brackets编辑器 [好东西啊]
  2. flink sql udf jar包_flink教程flink 1.11 集成zeppelin实现简易实时计算平台
  3. 从字节码角度解释i++和++i
  4. [Jarvis OJ - PWN]——[XMAN]level2(x64)
  5. (转)网络流-最大流 SAP算法(模板)
  6. 十二个 ASP.NET Core 例子
  7. java本地创建zk节点
  8. C++——析构函数为什么要为虚函数
  9. java蓝桥杯算法训练 求1000以内的完数(题解)
  10. android设计风格是什么软件下载,基于MaterialDesign设计风格的妹纸app的简单实现
  11. Excel练习线性回归
  12. 每日单词20110605
  13. win7计算机里的桌面不见了怎么办,win7桌面图标不见了怎么办,教您解决win7桌面图标不见了...
  14. 2007年在职攻读硕士学位全国联考
  15. SQL server中模式的定义和删除
  16. 金融危机下窗帘选购秘籍
  17. Java 实现word、excel、ppt、txt等办公文件在线预览功能!
  18. oracle ebs ar 表,EBS AR 模块常用表
  19. 干货来袭!手动搭建高可用的Redis5-0分片集群
  20. Windows操作系统+朝鲜红星+国产麒麟+红旗+渗透专用系统+Oracle专用+技术专栏【资源大合集】 | 寻找C站宝藏

热门文章

  1. HTML中 css红绿黄灯,纯CSS实现红绿灯效果(面试常见)
  2. QMosaic、MCM智拼图、ENVI匀色镶嵌对比
  3. MySQL初级练习题
  4. html默认字体是什么,Windows 系统的默认字体是什么?应用的默认字体是什么?
  5. 输电线路智能综合驱鸟器
  6. linux 内核配置lcd,Linux-2.6.32.2内核在mini2440上的移植---添加LCD背光驱动
  7. 小程序毕设作品之微信电子书阅读小程序毕业设计(4)开题报告
  8. vulfocus——discuz命令执行(wooyun-2010-080723)
  9. 使用 Amazon Pricing Calculator 在亚马逊云科技中国区域估算云使用成本
  10. 单片机节日彩灯实训报告_单片机(节日彩灯控制).doc