Android APP电量问题

由之前讲的android 电量情况,我们可以得出一个结论,手机的耗电量 与 电流*时间正相关。在测试时间内,是要能获取电流值,就能得到当前手机耗电情况。

手机耗电模块

  • CPU
  • WakeLock
  • DataTransmit
  • WifiScan
  • Sensor

  • Bluetooth

  • Camera

  • Flashlight

通用的电流测试方法,如下:

方法1

硬件测试:稳压电源+电流仪

(a)直流恒压电源(Agilent 66319D)

(b)GPIB(通用接口总线)

(c)模拟电池

(d)PC端电流软件

以上方法适用于测试整机电流。但是缺点也很明显,条件比较苛刻,受手机硬件条件的限制。并且这种方法测试手机app 的耗电量,需要相对纯净的rom支持。

方法2

获取电量信息:

一种方法可以直接定时读取uevent,电池驱动文件

/sys/class/power_supply/battery/uevent

http://blog.csdn.net/xubin341719/article/details/8709838

另一种方法可以注册电池广播

registerReceiver(receiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED))

方法缺陷:

驱动可能因rom不同,信息不一致,只能获取整机电池电量和剩余值,不能精细到某个app

读取系统文件或采用工具获取整体手机电流值的方法,受影响的因素多,数据波动大,可信度不高,同时从开发角度说,告诉一个简单的电流值,对他们定位问题的帮助,也不够。

使用GT提供的PowerStat工具

PowerStat APP 优化和细化了Settings 应用中的电量模块,使用到了com.android.internal.os.中的类,因此需要system app 权限,作为系统预置应用使用

Android 电量测试工具 Powerstat V1.x 版本支持 Android4.1~4.4 的系统(4.4 及以上系统上 需要系统签名,在已获取 root 权限的情况下,可将 apk 包置于/system/priv-app/目录下,作 为系统应用运行)。 工具的 V1.x2 版本在 V1.x 版本的基础上进行开发,细分耗电项,增加定时自动保存功能, 适配 Android5.0。同样,在 Android4.4 及以上系统也需要 root 权限才能安装使用。

依次执行如下命令:

>adb root

>adb shell #mount -o rw,remount /system #exit

>adb push Powerstat.apk /system/priv-app/Powerstat.apk

>adb shell

#cd /system/priv-app

#chmod 755 Powerstat.apk

#reboot

主界面如下:

(2)使用详情 在首界面列表中点击单个 app,进入 app 相应的详情界面,显示该 app 的耗电详情。显示 的耗电项包括:

【CPU】:app 使用 CPU 的时长和耗电量

【Screen】:根据 app 前台时长,将屏幕耗电分摊到 app

【DataTransmit】:app 数据传输(发送、接收)字节数和耗电量

【PartialWakelock】:PartialWakelock 时长、次数和耗电量

【FullWakelock】:FullWakelock 次数 【WindowWakelock】:WindowWakelock 次数

【Wakeup】:Wakelup 次数 【WifiRunning】:app 使用 Wifi 的时长和耗电量

【WifiScan】:app 进行 Wifi 扫描的时长和耗电量

【GPS】:app 使用 GPS 的时长、次数和耗电量

【Sensor】:app 使用各传感器的时长、次数和耗电量(没有使用则不显示)

【Audio】:app 使用音频设备的时长和耗电量 【Video】:app 使用视频设备的时长和耗电量

通过以上精细化的分析:

“这个版本,我们APP耗电量高。”

就可以变成:

“这个版本,我们APP占用CPU时间过高。”

“……”

与此同时,CPU、wakeLock、移动网络耗电量等细分指标,则都可以成为专项测试项。

其中流量在流量优化的方面,我们wakelock 使用也不多并且都及时释放,应用于团队或者众包,可以说CPU 是我们目前要减少耗电量,有两个方面,一个是在业务允许的范围内,减少传感器使用。另一个是在业务允许范围内减少CPU 使用。

如何再细化

  1. 传感器使用

     比如wifi 耗电,或者GPS耗电,只能从业务逻辑上看
    
  2. CPU使用

    可以通过某个线程占用的时间看。

/proc/<pid>/task/<tid>/stat文件

该文件包含了某一进程所有的线程活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。该文件的内容格式以及各字段的含义同/proc/<pid>/stat文件。

结论4:线程Cpu时间threadCpuTime = utime + stime

通过这种方式我们可以定位到具体线程耗时。

团队和众包测试

团队版本APP 待机测试54分钟,耗电分析

众包 和 美团众包对比

10分钟后

##WiFi 74602.85mAs 620663ms 1.49%

##美团众包(UID=10678) 54762.56mAs 1.09%

【CPU】 power(mAs)=2026.8590137962867 time(ms)=21850

【FgTime】 time(ms)=0

【FullWakelock】 time(ms)=0 count=0

【WindowWakelock】 time(ms)=0 count=0

【PartialWakelock】 power(mAs)=0.0 time(ms)=28516 count=29

【Wakeup】 count=24

【WifiRunning】 power(mAs)=0.0 time(ms)=0

【WifiScan】 power(mAs)=0.0 time(ms)=0

【DataTransmit】 power(mAs)=0.0 bytesSent=0 bytesReceived=0 costPerByte(mAs/byte)=0.0

【Gps】 power(mAs)=52735.7 time(ms)=310210 count=0

【Sensors】

【Audio】 power(mAs)=0.0 time(ms)=0

【Video】 power(mAs)=0.0 time(ms)=0

##蜂鸟众包(UID=10679) 53330.85mAs 1.07%

【CPU】 power(mAs)=595.3221513944223 time(ms)=7200

【FgTime】 time(ms)=0

【FullWakelock】 time(ms)=0 count=0

【WindowWakelock】 time(ms)=0 count=0

【PartialWakelock】 power(mAs)=0.0 time(ms)=53638 count=21

【Wakeup】 count=8

【WifiRunning】 power(mAs)=0.0 time(ms)=0

【WifiScan】 power(mAs)=0.0 time(ms)=0

【DataTransmit】 power(mAs)=0.0 bytesSent=0 bytesReceived=0 costPerByte(mAs/byte)=0.0

【Gps】 power(mAs)=52735.53 time(ms)=310209 count=0

【Sensors】

【Audio】 power(mAs)=0.0 time(ms)=0

【Video】 power(mAs)=0.0 time(ms)=0

10分钟前

##屏幕 3661.38mAs 20341ms 0.07%

##WiFi 2444.79mAs 20341ms 0.05%

##美团众包(UID=10678) 1724.90mAs 0.03%

【CPU】 power(mAs)=16.567113813574714 time(ms)=190

【FgTime】 time(ms)=0

【FullWakelock】 time(ms)=0 count=0

【WindowWakelock】 time(ms)=0 count=0

【PartialWakelock】 power(mAs)=0.0 time(ms)=1 count=1

【Wakeup】 count=1

【WifiRunning】 power(mAs)=0.0 time(ms)=0

【WifiScan】 power(mAs)=0.0 time(ms)=0

【DataTransmit】 power(mAs)=0.0 bytesSent=0 bytesReceived=0 costPerByte(mAs/byte)=0.0

【Gps】 power(mAs)=1708.33 time(ms)=10049 count=0

【Sensors】

【Audio】 power(mAs)=0.0 time(ms)=0

【Video】 power(mAs)=0.0 time(ms)=0

##蜂鸟众包(UID=10679) 1708.16mAs 0.03%

【CPU】 power(mAs)=0.0 time(ms)=0

【FgTime】 time(ms)=0

【FullWakelock】 time(ms)=0 count=0

【WindowWakelock】 time(ms)=0 count=0

【PartialWakelock】 power(mAs)=0.0 time(ms)=6185 count=2

【Wakeup】 count=0

【WifiRunning】 power(mAs)=0.0 time(ms)=0

【WifiScan】 power(mAs)=0.0 time(ms)=0

【DataTransmit】 power(mAs)=0.0 bytesSent=0 bytesReceived=0 costPerByte(mAs/byte)=0.0

【Gps】 power(mAs)=1708.16 time(ms)=10048 count=0

【Sensors】

【Audio】 power(mAs)=0.0 time(ms)=0

【Video】 power(mAs)=0.0 time(ms)=0

增量:

美团众包 0.03% ~ 1.09% 消耗 10分钟电量的1.06%

饿了么众 0.03% ~1.07% 消耗 10分钟电量的1.04%

GPS

美团众包 power(mAs)=1708.33 time(ms)=10049 ~ power(mAs)=52735.7 time(ms)=310210

蜂鸟众包 power(mAs)=1708.16 time(ms)=10048 ~ power(mAs)=52735.53 time(ms)=310209

CPU

美团众包【CPU】 power(mAs)=16.567113813574714 time(ms)=190 ~【CPU】 power(mAs)=2026.8590137962867 time(ms)=21850

蜂鸟众包 【CPU】 power(mAs)=0.0 time(ms)=0 ~【CPU】 power(mAs)=595.3221513944223 time(ms)=7200

可以看到,关键指标上美团众包和蜂鸟众包持平。

电量测试方案和局限

1.不能线上追踪

2.团队如何对比,对比测试指标

  • 待机状态 对比, back后台或者home后台 查看消耗
  • 操作类 自动化测试对比,是否能支持竞对比较

3.纵向对比

4.powerstat 需要完善,如没有统计振动耗电等

results matching ""

    No results matching ""