Framework定制-统计应用耗电量

前言

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

一、电量相关类

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

 

谁在耗电,一目了然

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值