仅适用于android5.0以上系统。
1、使用Battery Historian对耗电记录文件进行分析
这篇文章里有讲如何通过adb命令获取某一段时间内电量消耗记录文件,然后用Battery Historian工具导入文件,分析电量消耗情况。
2、耗电量分析原理
系统提供的接口:./frameworks/base/core/java/com/Android/internal/os/PowerProfile.java
该类提供了public double getAveragePower(String type)接口,type可取PowerProfile中定义的常量值,
包括POWER_CPU_IDLE(CPU空闲时),POWER_CPU_ACTIVE(CPU处于活动时),POWER_WIFI_ON(WiFi开启时)等各种状态。
并且从接口可以看出来,每个模块的电流值,是从power_profile.xml文件取的值。PowerProfile.java只是用于读取power_profile.xml的接口而已,后者才是存储系统耗电信息的核心文件。power_profile.xml文件的存放路径是/system/framework/framework-res.apk。
power_profile.xml内容:
<?xml version="1.0" encoding="utf-8"?>
<device name="Android">
<item name="none">0</item>
<item name="screen.on">169.4278765</item>
<item name="screen.full">79.09344216</item>
<item name="bluetooth.active">25.2</item>
<item name="bluetooth.on">1.7</item>
<item name="wifi.on">21.21733311</item>
<item name="wifi.active">98.04989804</item>
<item name="wifi.scan">129.8951166</item>
<item name="dsp.audio">26.5</item>
<item name="dsp.video">242.0</item>
<item name="gps.on">5.661105191</item>
<item name="radio.active">64.8918361</item>
<item name="radio.scanning">19.13559783</item>
<array name="radio.on">
<value>17.52231575</value>
<value>5.902211798</value>
<value>6.454893079</value>
<value>6.771166916</value>
<value>6.725541238</value>
</array>
<array name="cpu.speeds.cluster0">
<value>384000</value>
<value>460800</value>
<value>600000</value>
<value>672000</value>
<value>768000</value>
<value>864000</value>
<value>960000</value>
<value>1248000</value>
<value>1344000</value>
<value>1478400</value>
<value>1555200</value>
</array>
<array name="cpu.speeds.cluster1">
<value>384000</value>
<value>480000</value>
<value>633600</value>
<value>768000</value>
<value>864000</value>
<value>960000</value>
<value>1248000</value>
<value>1344000</value>
<value>1440000</value>
<value>1536000</value>
<value>1632000</value>
<value>1728000</value>
<value>1824000</value>
<value>1958400</value>
</array>
<item name="cpu.idle">0.144925583</item>
<item name="cpu.awake">9.488210416</item>
<array name="cpu.active.cluster0">
<value>202.17</value>
<value>211.34</value>
<value>224.22</value>
<value>238.72</value>
<value>251.89</value>
<value>263.07</value>
<value>276.33</value>
<value>314.40</value>
<value>328.12</value>
<value>369.63</value>
<value>391.05</value>
</array>
<array name="cpu.active.cluster1">
<value>354.95</value>
<value>387.15</value>
<value>442.86</value>
<value>510.20</value>
<value>582.65</value>
<value>631.99</value>
<value>812.02</value>
<value>858.84</value>
<value>943.23</value>
<value>992.45</value>
<value>1086.32</value>
<value>1151.96</value>
<value>1253.80</value>
<value>1397.67</value>
</array>
<array name="cpu.clusters.cores">
<value>4</value>
<value>4</value>
</array>
<item name="battery.capacity">3450</item>
<array name="wifi.batchedscan">
<value>.0003</value>
<value>.003</value>
<value>.03</value>
<value>.3</value>
<value>3</value>
</array>
</device>
根据各模块的耗电值,以及该时间段内所做的操作来分析找到导致电量消耗大的地方,再做对应的优化。
转载自原文链接, 如需删除请联系管理员。
原文链接:Android电量监控与优化,转载请注明来源!