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耗电情况作一个基本的估算

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

Android 应用CPU耗电监控分析相关推荐

  1. Android Studio CPU profiler性能分析工具介绍和使用详解

    Android Studio CPU profiler性能分析工具介绍和使用详解 CPU profiler介绍 Android Studio CPU 性能剖析器可实时检查应用的 CPU 使用率和线程活 ...

  2. Android功耗(21)--- App耗电发热分析

    Android App耗电发热分析 adb shell dumpsys batterystats 这个命令可以打印出于电池消耗相关的信息,可以通过 adb shell dympsys batterys ...

  3. Android App耗电发热分析

    如题,这是一篇分享如何分析Android平台App耗电问题的文章,今天学到的新技能,算是之前写过的一篇文章Android APP耗电优化的一些经验的续集吧,O(∩_∩)O. 首先,上一个adb命令: ...

  4. android 获取cpu使用率_超详细的zabbix监控windows磁盘IO及cpu使用率教程

    概述 今天主要介绍怎么用zabbix来监控windows CPU使用率及磁盘IO,下面一起来看看吧~ 1.监控Windows-CPU使用率 1.1.创建模板 在zabbix中,默认的模板不带CPU使用 ...

  5. Android基础性能检测与分析

    本文内容:基于Android基础性能检测与分析 版权声明:本文为原创文章,未经允许不得转载 博客地址:http://blog.csdn.net/kevindgk 前言 UI性能分析 应用启动时间计算以 ...

  6. Android高手笔记 - 耗电优化

    耗电的背景知识 电池技术:电池容量,充电时间,寿命,安全性: 电量和硬件:应用程序不会直接去消耗电池,而是通过使用硬件模块消耗相应的电能:CPU.屏幕.WiFi 和数据网络.GPS 以及音视频通话都是 ...

  7. 【错误记录】应用运行 CPU 占用率达到 90% ( 使用 CPU Profiler 监控应用运行情况 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在 Android 运行时 , 进入某界面后 , 退出界面 , CPU 占用率泄漏 12 % , 某个线程没有退出 , 一直在后台运行 ; 再次进入 ...

  8. 微信Android客户端的卡顿监控方案

    2021.8.1  Matrix 2.0 TraceCanary新增了以下功能 微信Android客户端的卡顿监控方案 https://mp.weixin.qq.com/s/3dubi2GVW_rVF ...

  9. 基于android系统DVR稳定性问题分析及对策

    基于android系统DVR稳定性问题分析及对策 DVR,全名Digital Video Recorder,数字视频录像机,在车载行业大家通俗的叫行车记录仪,因为这个数字视频的内容是行车的形式动态.如 ...

最新文章

  1. 【数据库】mysql报错 编码码1130 和错误码1146
  2. win10 安装pydot
  3. LeetCode 205 Isomorphic Strings(同构的字符串)(string、vector、map)(*)
  4. ps怎么制作流体_PS教程:制作渐变流体效果海报
  5. 降低数据中心功耗的 4 大方法
  6. python网络爬虫权威指南 豆瓣_豆瓣Python大牛写的爬虫学习路线图,分享给大家!...
  7. 基于Cairngorm的Silverlight开发 - part3
  8. 一文详解MySQL中的事件调度器EVENT
  9. sql简介_SQL简介
  10. 梦到曦和二字与公司起名
  11. NanoPi M1 Plus:Allwinner H3使用lichee源码编译Linux-3.4 BSP
  12. c语言考试中操作题文件,计算机二级考试C语言操作题题库(21页)-原创力文档...
  13. 顺序表-有序顺序表的归并算法(新建表+小的先放+余下归并)
  14. PhotoShop 保存 8 bit 位图(Bmp)的方法【记录备忘】
  15. ubuntu14.04扩展屏幕后,打开matlab就死机。求大神帮忙解决!!!万分感谢
  16. BIhuman商业智能和数据仓库高
  17. Sparse Matrix, MUMPS
  18. c语言遍历枚举,C# Enum 类型遍历
  19. WML语言基础(WAP建站)二
  20. 【起航计划 001】2015 起航计划 踏在起跑线上

热门文章

  1. windows系统硬盘序列号、MAC地址查询方法
  2. Python复盘股票_搭建系统|“财务数据选股工具”如何与“多维度股票行情分析工具”完成无缝切换...
  3. 地理信息技术——平民化时代的来临(一)
  4. 有没有大佬知道,有哪些可以在网页上自动填写账号密码并登录的方法?
  5. C#中关于SqlCommand的使用
  6. 祁文之恋——离开你的第五天
  7. excel一列求和_让excel填写数据后自动填充公式运算的方法
  8. JVM详解——内存结构
  9. 如何破解修改Linux操作系统用户密码
  10. android systemserver 占用cpu 高,关于system/bin/mediaserver占用CPU高的 解决方法