电量分析
借助Google的电量分析工具,开发者可以非常方便地对应用耗电进行详细分析。
Setting-Battery
在Setting中打开Battery选项,显示电池使用情况,如图6.90所示。
图6.90 电池使用情况
这里可以显示整个电池的使用情况,并列出详细的电池电量使用排行。点击列表中的一项,可以看见详细的功耗分析,如图6.91所示。
图6.91 电池详细数据
这里可以对App的耗电情况进行一个初步判断,如果手机偶然性的耗电异常,那么就可以确定是不是本App的问题所导致的。
Battery Historian
从Android 5.0以来,Google逐渐加强了对性能优化的处理。因此在Android L预览版的发布会上,Google提供了一个新的电量检测工具——Battery Historian。
开启full-wake-history
手机设备(Android 5.0+系统)连接ADB后,输入如下所示的指令打开full-wake-history功能,记录详细的Battery history。
- ➜ Downloads adb shell dumpsys batterystats --enable full-wake-history
- Enabled: full-wake-history
重置电池信息历史
在检测前,最好使用指令清空Battery history,避免在dump信息的时候抓取过多的信息,代码如下所示。
- ➜ Downloads adb shell dumpsys batterystats --reset
- Battery stats reset.
操作、测试
当上面的指令执行完毕后,拔掉手机ADB,开始自己的App测试工作。测试完毕后,重新连接ADB。
获取电量数据
首先,需要获取电量的检测数据。
dump信息
重新连接ADB后,使用如下所示的代码来dump电量数据。
- ➜ Downloads adb shell dumpsys batterystats > batterystats.txt
根据电量信息内容的多少,系统执行dump指令所消耗的时间是不一样的,等系统处理完毕后,即可生成batterystats.txt文件。
解析数据
虽然dump出了完整的电量使用历史信息,但是很难查看。需要使用工具来进行格式化处理,Google提供了分析工具,下载地址为:
https://github.com/google/battery-historian
找到其中的historian.py文件,下载该文件即可。然后执行如下所示的指令(需要Python环境)。
- ➜ Downloads python historian.py batterystats.txt > batterystats.html
通过Python脚本格式化数据,生成新的batterystats.html文件,在Chrome中打开该HTML文件,如图6.92所示。
分析电量使用
根据生成的图表,可以从对应的参数来获取电量信息,完整的电量信息可以从下面这个网站中获取。
http://developer.android.com/intl/zh-cn/tools/performance/batterystats-battery-historian/charts.html
图6.92 batterystats
横坐标
横坐标代表时间周期,以秒为单位,分钟为周期,到60秒即恢复到0。在下面的总结中,会有详细的起始时间。
纵坐标
- battery_level:电量等级,即当前电量。
- plugged:是否在充电状态。
- screen:屏幕是否为亮屏状态。
- top:当前处于前台的App,即显示的App。
- wake_lock:当前是否被请求了wake_lock。
- running:当前App是否处于idle状态,即是否有操作。
- wake_lock_in:具体申请wake_lock的模块。
- status:手机当前状态。
Battery Historian2.0
新版本的Battery Historian有了更多的功能和更强大的分析界面。
前面笔者使用了Google提供的Battery Historian工具进行了电量的定量分析。使用historian.py脚本转换了dump出来的数据。而在Battery Historian工具的Github主页上,Google提供了Battery Historian 2.0。新版本的Battery Historian工具使用Go语言开发,在Github上Google提供了详细的环境搭建方法,原理实际上与上面的方法是一样的,只不过生成的图表更加有利于分析,其Github主页上的示例分析图如图6.93、图6.94、图6.95所示。
图6.93 示例分析1
图6.94 示例分析2
图6.95 示例分析3
由于该版本是使用Go语言进行开发的,笔者没有搭建Go语言开发环境,所以还没有具体的测试数据,开发者可以根据自己的需要选择合适的电量分析工具进行分析。
