Android性能优化篇之电量优化(1)——电量消耗分析

Android性能优化篇之电量优化(1)——电量消耗分析_第1张图片
image

引言

1. Android性能优化篇之内存优化--内存泄漏

2.Android性能优化篇之内存优化--内存优化分析工具

3.Android性能优化篇之UI渲染性能优化

4.Android性能优化篇之计算性能优化

5.Android性能优化篇之电量优化(1)——电量消耗分析

6.Android性能优化篇之电量优化(2)

7.Android性能优化篇之网络优化

8.Android性能优化篇之Bitmap优化

9.Android性能优化篇之图片压缩优化

10.Android性能优化篇之多线程并发优化

11.Android性能优化篇之数据传输效率优化

12.Android性能优化篇之程序启动时间性能优化

13.Android性能优化篇之安装包性能优化

14.Android性能优化篇之服务优化

介绍

当我们使用Android完成任务时,设备硬件正在快速消耗电池电量来完成这些任务。任务越繁重,消耗的电量越多越快。这样用户就会在想是哪一个应用导致电量消耗的怎么快的?
要想写出耗电量低的应用的关键是要透彻理解电量消耗的全部过程。
我们很想知道我的应用执行的哪些任务消耗的电量是最多的?这个问题确实会很棘手。电量消耗的计算与统计是一件麻烦而且矛盾的事情,记录电量消耗本身也是一个费电量的事情。唯一可行的方案是使用第三方监测电量的设备,这样才能够获取到真实的电量消耗(因为第三方硬件监测的时候是用的自己的供电而不是用的手机的电量)。

1.电量消耗分析

待机状态的电量消耗


Android性能优化篇之电量优化(1)——电量消耗分析_第2张图片


使用和唤醒屏幕后


Android性能优化篇之电量优化(1)——电量消耗分析_第3张图片
image2.png

当设备从休眠状态中,被应用程序假面唤醒时,你会看到在第一次唤醒时,这里有一条电量使用高峰线

CUP唤醒时的高峰线


Android性能优化篇之电量优化(1)——电量消耗分析_第4张图片
image3.png

后续的一些执行的消耗


Android性能优化篇之电量优化(1)——电量消耗分析_第5张图片
image4.png

值得注意的是当工作完成后,设备会主动进行休眠,这非常重要,在不使用或者很少使用的情况下,长时间保持屏幕唤醒会迅速消耗电池的电量。

蜂窝式无线
当设备通过无线网发送数据的时候,为了使用硬件,这里会出现一个唤醒好点高峰。接下来还有一个高数值,这是发送数据包消耗的电量,然后接受数据包也会消耗大量电量 也看到一个峰值。
所以我们指导了,开启无线模式这个过程非常耗电,那么硬件这块为了防止频繁开启关闭耗电,采取了一个无奈的办法,会在一个小段时间内保持开启模式,防止短时间内还有数据包需要接收。这些数据非常有用,可是 不是所有开发者都有这个第三方设备跟踪。但是使用Android L版本就可以利用到新的一系列的工具来优化应用程序的耗电。(这里显然不要考虑兼容性问题吧,我只是想测电量消耗问题,同一款APP在不同版本上耗电情况应该不会有太大影响。)


Android性能优化篇之电量优化(1)——电量消耗分析_第6张图片
image5.png
2.Battery Historian(电量使用记录分析工具)

Battery Historian是Android 5.0开始引入的新API。通过下面的指令,可以得到设备上的电量消耗信息:

2.1 配置分析环境

第一种 通过安装Docker环境来安装
因本人没有使用这种,想要了解的朋友可以参考文档
第二种 源码安装

(1).GO环境安装下载
(2). 安装Git下载
(3). 安装Python下载
(4). 安装Java环境
(5). 下载Battery Historian源码并且运行
下载源码
    go get -d -u github.com/google/battery-historian/
运行Battery Historian
    cd $GOPATH/src/github.com/google/battery-historian
    go run setup.go
开启服务
    go run cmd/battery-historian/battery-historian.go
检查/battery-historian是否运行
    登录网址 http://localhost:9999查看    
详细可以参考Google官方的文档查看
2.2 导出电量发现文件

historian-V1

    $ adb shell dumpsys batterystats > xxx.txt  //得到整个设备的电量消耗信息
    $ adb shell dumpsys batterystats > com.package.name > xxx.txt //得到指定app相关的电量消耗信息

historian-V2
android 6.0 以及以下版本

    adb bugreport > bugreport.txt

android 7.0

    adb bugreport bugreport.zip
2.3 开始分析

启动battery-historian服务,打开http://localhost:9999,上传bugreport.txt或者bugreport.zip文件

image6.png

Android性能优化篇之电量优化(1)——电量消耗分析_第7张图片
image7.png
3.battery-historian分析

现在我们就来分析下面的面板:

Android性能优化篇之电量优化(1)——电量消耗分析_第8张图片
image8.png

横坐标
我们看到下面的横坐标是代表上海的时间.
坐标就是一个时间范围,咱们的例子中统计的数据是以重置为起点,获取bugreport内容时刻为终点。我们一共采集了多长时间的数据,图表下也有信息说明。(经其他人的反馈,这个坐标间隔是会随着时间的长度发生改变,所以要以你的实际情况为准。通过滚动鼠标来调整缩放级别)
纵坐标
纵坐标的数据有点多,我们来一个一个分析。
battery_level
电量等级我们看到面板的右边就是电量等级的指标,横着面板的黑线就代表电量等级,我们可以把鼠标放到上面来查看电量的等级值。
也可以在横坐标的battery_level来查看


Android性能优化篇之电量优化(1)——电量消耗分析_第9张图片
image9.png
image10.png

显示当前时间,电量等级等等。

CPU running

界面的状态,主要判断是否处于idle的状态。用来判断无操作状态下电量的消耗。

Userspace wakelock

wake_lock 该属性是记录wake_lock模块的工作时间。是否有停止的时候等

Screen

屏幕是否点亮,这一点可以考虑到睡眠状态和点亮状态下电量的使用信息。

Top app

该栏显示当前时刻哪个app处于最上层,就是当前手机运行的app,用来判断某个app对手机电量的影响,这样也能判断出该app的耗电量信息。该栏记录了应用在某一个时刻启动,以及运行的时间,这对我们比对不同应用对性能的影响有很大的帮助。

Activity Manager Proc
Mobile signal strength

移动信号强度

Wifi scan

wifi扫描的时间

Wifi supplicant

当前wifif状态

Wifi radio

wifi信号

Wifi signal strength

wifi信号强度

Wifi running

wifi是否连接

Wifi on

wifi是否开启

Audio

音频播放的时间点

Temperature

当前手机温度

Plugged

充电状态,这一栏显示是否进行了充电,以及充电的时间范围。

Charging on

是否在充电

health

电池健康状态的信息,这个信息一定程度上反映了这块电池使用了多长时间。
这一栏记录电池状态在何时发生改变,上面的图中电池状态一直处于good状态。

plug

充电方式,usb或者插座,以及显示连接的时间。
这一栏显示了不同的充电方式对电量使用的影响。

Job

后台的工作,比如服务service的运行。从下面图中可以看到qihoo的AppStore和鲁大师都在运行后台服务。

data_conn

数据连接方式的改变,上面的edge是说明采用的gprs的方式连接网络的。此数据可以看出手机是使用2g,3g,4g还是wifi进行数据交换的。这一栏可以看出不同的连接方式对电量使用的影响。

status

电池状态信息,有充电,放电,未充电,已充满,未知等不同状态。
这一栏记录了电池状态的改变信息。

phone_signal_strength

手机信号状态的改变。
这一栏记录手机信号的强弱变化图,依次来判断手机信号对电量的影响。

Sync

是否跟后台同步.

可以把鼠标停在某一项上面。可以看到何时sync同步 启动的,持续时间Duration多久。

电池容量不会显示单一行为消耗的具体电量,这里只能显示使用电池的频率和时长,你可以看分时段的剩余电量来了解具体消耗了多少电量。

wake_lock_in

wake_lock有不同的组件,这个地方记录在某一个时刻,有哪些部件开始工作,以及工作的时间。

gps

gps是否开启

phone_in_call

是否进行通话

你可能感兴趣的:(Android性能优化篇之电量优化(1)——电量消耗分析)