想知道Android应用吃掉了多少电,怎么破?
来源:互联网 发布:怎么阅读spring源码 编辑:程序博客网 时间:2024/05/01 20:27
虽然现在人人手持充电宝,但也不能让你的应用肆无忌惮的吃掉用户的手机电量,如何评测应用的耗电量,保证你的应用在同类产品中耗电少,正是本文想要探讨的话题
耗电定义
此处讨论的耗电,是指Android手机在脱离充电设备后,使用机身电池的情况。由于在不同的使用场景下,电池的输出电压(Voltage)和输出电流(mA)。电压统计单位一般为V(伏),电流统计单位一般为毫安(mA)。
耗电统计分为两个层次:
System(整体):统计系统中所有应用和服务的耗电情况,可以通过AndroidSDK中的API获取。
Application(应用):按比例分配到每个应用程序上的耗电情况。比例通过从/sys/devices/目录下不同的设备的log来计算得出。
耗电细分分类
Andorid耗电的地方主要分为以下几类:
1. LCD/OLED屏幕
2. GPS定位
3. 音频输出
4. GSM/3G/4G通信
5. WIFI通信
6. 其他传感器(陀螺仪、NFC等)
Android SDK没有提供获取这些分类耗电统计的API,所以只能通过Android底层的Linux内核来统计。在Linux内核中,这些设备的使用情况都会记录为log。包括电压、电流等数据,存储在/sys/devices/目录下。
Audio设备没有可以查询的log,只能hook系统调用,通过API计算进行粗略的统计。
CPU:/sys/devices/system/cpu/目录
WIFI:/sys/devices/virtual/net/eth0
GSM/3G:/sys/devices/virtual/net/rmnet0
GPS:/data/misc/gps.status
没找到这个对应的文件,和Audio一样,也是通过监听GPS事件来计算的,与机型相关。
耗电测试特点总结
1. Android上层(应用层)没有获取分类型耗电量的API
2. Android的Linux底层记录着设备使用的Log
3. 能够通过系统获取的耗电类型,获取的都是总量或者总量占比
4. 具体耗电多少mW(V×mA×t),和机型相关,每种类型需要测量在不同状态下的单位耗电量: p (mW/clock)
5. Hook系统调用或者系统log,统计在一定时间段内,进程调用的次数和时间(系统时钟数):t (clock)
6. 某进程总耗电量:E = p·t(mW)
监控耗电量的工具
密歇根大学一个实验室开发的一个开源软件。用来统计实验数据的。适配了三款手机:HTCG7(Dream)、HTCNexus One、MotorolaDROID 2
在此基础上利用上述方法改编了该工具,以Android输入法为例监控效果截图如下:
原文链接
如需转载该篇文章,请注明来自“搜狗测试”
- 想知道Android应用吃掉了多少电,怎么破?
- 标题被吃掉了.....
- 用户要哭傻了 Android 5.1随便就能吃掉你1G内存
- 想知道支付宝(Android版)使用了哪些开源项目?
- 我只是想知道怎么加积分。
- 9大绝招吃掉了亚健康
- 什么吃掉了我的硬盘?
- 什么吃掉了我的硬盘?
- 我快被食人花吃掉了。
- 一口一口吃掉struts(七)——ActionForward知多少
- 一口一口吃掉struts(七)——ActionForward知多少 .
- 蒙迪欧致胜豪华版钥匙没电了怎么启动汽车?
- 刚学JAVA,做了个SOCKET服务器心跳包,只能实现正常心跳检测,无法实现心跳停止,短信通知管理员!想知道怎么改才正确!
- 如何去观察应用使用了多少内存
- ACM 324有一堆桃子不知数目猴子第一天吃掉一半又多吃了一个第二天照此方法,吃掉剩下桃子的一半又多一个,天天如此,到第m天早上,猴子发现只剩一只桃子了,问这堆桃子原来有多少个? (m<29) 输入
- Linux内存被吃掉了,它去哪里了?
- Android面试题----Android为每个应用分配多少内存?
- 怎么了怎么了
- 使用repo和git下载android源码 和 相关解释
- git使用小结
- Unity脚本的生命周期
- 第三章:UVa1585 解题报告
- You can't operate on a closed Connection!!!
- 想知道Android应用吃掉了多少电,怎么破?
- 目的:使用bbed将已经offline掉的datafile 5 的scn信息改为与其他datafile一致。
- 做测试,不会沟通就加班到死
- 由《Head First 设计模式》的代理模式到Java动态代理
- 治理&预防(环保文章? NoNoNo~)
- 为了什么,我们一定要敏捷测试?
- C语言之交换两个整型变量的值(四种方法)
- 机器学习实战——感知机
- autorelease学习