Android 应用CPU耗电监控分析

                                           Android 应用CPU耗电监控分析

前言:

  智能手机电量的消耗是由多种因素造成的,如屏幕的材质、大小、亮度,通信组件的功率,cpu,电池等。本文仅从软件应用对电量的消耗这个角度对耗电控制进行探索。

获取手机当前电量:

 

Android以广播的形式通知应用当前的电量使用情况,开发者可以很方便的获取到当前的电池电量信息:

首先,注册一个接收者:

在自定义的receiver中获取电量信息:

CPU使用率:

 

  软件的耗电主要是由于CPU的工作引起的。因此,如果计算出每个软件某一时段的cpu占用率,即可对各个软件的耗电程度有一个基本的了解。

  Android的API中没有直接提供可查询cpu使用率相关的接口,但是作为android的底层,linux系统中却可以很方便地查询到当前的cpu信息以及实时的cpu使用情况。在得到相关数据后,经过计算,就可以得到每个软件的cpu使用率。

以下为具体的实现:

1.          通过程序访问/proc/stat获取cpu总体使用情况;

如:

~$ cat /proc/stat

cpu  38082 627 27594 893908 12256 581 895 0 0

...

其中,每个字段分别代表user、nice、system 、idle、iowait、irq、softirq、 stealstolen、guest这几个参数自系统启动以来所产生的节拍数。

当前总的节拍数为Total = user + nice + system + idle + iowait + irq + softirq + stealstolen  +  guest;

如:

在相对较小的间隔内,先后取两次总节拍数,如Total1和Total2.

2  访问/proc/<pid>/stat获取某一进程cpu使用情况。

   如:

                   ~$ cat /proc/14020/stat

14020 (doujia.phoenix2) S 120 120 0 0 -1 4194624 181165 3227 211 2 22817 4810 7

25 20 0 40 0 9902620 346767360 12470 4294967295 1 1 0 0 0 0 4612 0 38120 4294967

295 0 0 17 0 0 0 0 0 0

其中,第14~17字段分别为utime, stime, cutime, cstime。它们的总和及当前进程的cpu总节拍数。

当前进程自系统启动以来所产生的总节拍数为pt = utime+stime+cutime+cstime

如:

在相对较小的间隔内,先后去两次总节拍书,如pt1和pt2.

     3  计算进程的cpu使用率

        某进程的cpu使用率 =  (pt2-pt1) * 100 / (Total2-Total1)

    如:

   

如果要获取所有程序的使用率,只要简单ps出进程并以grep或其他形式过滤下,取到pid后,遍历计算即可。

这样,就基本得出了当前系统内各软件的cpu使用率。Cpu使用率高的程序,耗电量自然也相对较大。

剩余电量使用时间的计算思路

由于电量的消耗的是由多种因素造成的,因此剩余时间一般只能是估值。

以如下方式估算剩余时间:

      剩余时间 = 电池容量 / 硬件(屏幕/cpu等)的功耗

假设在电池容量固定的情况下,硬件的功耗就决定了电量的剩余使用时间。

Android手机中,耗电最大的模块一般有屏幕、cpu、wifi、GPS等。

 

a)       屏幕的功耗:

1)              获取当前手机型号:android.os.Build.MODEL

2)              获取屏幕尺寸:getWindowManager().getDefaultDisplay()

3)              获取屏幕亮度:

通过以上素材,配合相应的硬件资料,以估算屏幕的功耗。

b)CPU功耗:

1) 获取当前手机型号:android.os.Build.MODEL

2) 获取cpu信息:/proc/cpuinfo

  如:

shell@android:/ $ cat /proc/cpuinfo

cat /proc/cpuinfo

Processor       : ARMv7 Processor rev 3 (v7l)

processor       : 0

BogoMIPS        : 2007.19

processor       : 1

BogoMIPS        : 2007.19

Features        : swp half thumb fastmult vfp edsp neon vfpv3

CPU implementer : 0x41

CPU architecture: 7

CPU variant     : 0x1

CPU part        : 0xc09

CPU revision    : 3

Hardware        : T1 Samsung board

Revision        : 0007

Serial          : 000090423c62b4ce

  通过以上素材,配合相应的硬件资料,以估算CPU的最大理论功耗。

3) 在得到最大功耗后,根据cpu使用率,可以对当前的cpu耗电情况作一个基本的估算

在得到所有主要耗电硬件的功耗、电池的理论上的最高容量、当前电量百分比后,就可以估算出剩余电量的使用时间了。

  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值