第一招:看系统的 设置-电池 里面的耗电排名。


除非你的APP耗电很出格,一用手机就发烫、电量直线往下掉,否则,对于大多数用户,你到底耗电怎么样,主要就是看这个了。


先测测你的静默耗电:

不要插usb和电源,在不充电的情况下,保持你的app前台或者后台静默一晚上,也可以根据不同业务场景,多测几次,然后在 设置-电池 中,看看你的耗电排名,以及进一步点击看看具体开销。


再测测你的操作耗电:

步骤一样,只不过,你可以拿竞争对手或者业内标杆来进行下对比,各正常操作10分钟,然后再看耗电的排名和具体开销,相信自己的app耗电在什么水平上,应该心里有数了。



第二招:通过adb工具查看各部件的耗电。


    手机中的每个部件(CPU、LED、sensor、GPS、3G、wifi 、wakelock等等)运行时对应的能耗值都放power_profile.xml 文件中, 而且系统的设置-->电池-->使用情况中,统计的能耗使用情况也是以power_profile.xml的value 作为基础参数的。通过命令监控app各部件的使用时长,然后结合设备耗电的基础参数进行加权计算,即可得到 app 使用的耗电量。操作步骤如下: 


1) 拔掉 usb 连接;

2) 操作 app(比如保持前台、后台静默一段时间);

3) 插上 usb,执行 adb shell dumpsys batteryinfo,找到你的应用对应UID资源使用,如下所示Wake lock GCM_LIB: 24m 41s 316ms长时间使用,导致耗电:

#10062:
    Network: 160.39KB received, 150.69KB sent
    Wake lock window: 4s 729ms window (2 times) realtime
    Wake lock GCM_LIB: 24m 41s 316ms partial (1 times) realtime
    Wake lock AlarmManager: 32ms partial (23 times) realtime
    TOTAL wake: 24m 41s 348ms partial, 4s 729ms window realtime
    Sensor GPS: (not used)
    Proc *wakelock*:
      CPU: 9s 230ms usr + 9s 470ms krn
    Proc com.xxxx.xxxx:
      CPU: 1s 120ms usr + 770ms krn
    Proc com.xxxx.xxxx::
      CPU: 33s 140ms usr + 7s 320ms krn
    Apk com.xxxx.xxxx::
      Service com.xxxx.xxxx::
        Created for: 47m 23s 532ms  uptime
        Starts: 1, launches: 1
      Service com.xxxx.xxxx::
        Created for: 15s 910ms  uptime
        Starts: 19, launches: 19
        ……

4) 监控app wake lock 类型、次数以及时间,传感器的使用时间,网络流量的开销,各子个进程的 CPU 使用时间;


第三招:观察cpu开销


保持前后台静默的时候,通过命令 adb shell top -d 1 |grep yourapp,可以观察你的应用相关进程的cpu开销。

前台静默时在滚屏、倒计时等不可视的时候,我们期望cpu占用0%。

尤其是后台静默,一旦超过0%,必然持续耗电,都必须解决。




简简单单3招,足以让你对你的APP的耗电量有个大概的评估,而且,对存在的问题有个大概的定位。


对于无线设备发展到今天的地步,性能越来越不再是问题了,但是,电量却依然是目前最大的一个瓶颈,你的APP想因为耗电而被用户“请出”设备吗?不妨动起来,试试这简单的三板斧。