后台耗电分析

2019-06-22  本文已影响0人  码上述Andy

一. 概述

为了在待机模式下,减少过多的电量消耗,影响手机的续航时间,进入华为app白名单。

二. Android模块耗电项

系统耗电统计:

path: com.android.internal.os.BatteryStatsHelper#processAppUsage


image.png

由此可以看出以下是耗电大头:
(1) 显示器(led&lcd)
(2) 网络(数据+wifi)
(3) CPU
其次:音频、蓝牙

三. 分析方法及检测工具

1.Battery Historian--Android系统耗电检测分析工具

*Battery Historian可以展示手机耗电的一段时间的过程。

(1) 环境配置步骤:

配置Python、go环境。

下载Battery Historian。

(2) 工具使用及数据获取:

adb shell dumpsys batterystats --enable full-wake-history
adb shell dumpsys batterystats –reset
adb bugreport > bugreport.txt
go run cmd/battery-historian/battery-historian.go

浏览器输入:http://localhost:9999/ 添加刚才的文件,最后submit,如下图:

image.png
image.png

(3)关键指标说明:

Cup runing:Cpu是否运行
Wifi runing:WiFi是否运行
Wifi Radio:是否WiFi数据传输
Wifi Scan:WiFi是否扫描
Screen:是否开启屏幕
Network connectivity:网络连接状态
Activity manager proc:活跃的进程
Wifi signal strength:Wifi信号强度
Charging on:是否充电
Battery level:电量
Mobile network type:移动网络类型
Mobile signal strength:移动信号强度

2.TraceView-性能分析工具

(1) trace 获取3种方式

   #DDMS-start Method Profiler
   #Android Profiler—cpu栏,dump
   #Debug.startMethodTracing(“tra.trace”)/stopMethodTracing()-(adb      pull sdcard/tra.trace)

(2)工具介绍

image.png
TraceView分为两部分:

线程时间片面板(时间和线程)
分析面板(具体方法消耗)

分析面板函数说明:

Parents:调用该方法的方法
Children:被该方法调用的方法

(3) 关注指标:

Calls+Recur Calls/Total:方法调用次数+递归调用次数
Cpu Time/Call:方法每次调用cpu的耗时

(4) 具体分析方法:

*分析色块:同一个函数颜色一样,频繁出现一样的色块可能会问题。
*分析函数调用次数:Calls+Recur Calls/Total和Cpu Time/Call 函数频繁递归调用可能会有问题。


image.png

3. dmTraceDump

(1)生成分析文件的HTML-列出函数调用信息

/Users/zhouwen/Library/Android/sdk/platform-tools/dmtracedump –h traceA.trace > traceB.trace
*Inclusive


image.png

*Class


image.png

(2)生成函数调用图-可以展示出函数调用(被调用及调用的子方法)

/Users/zhouwen/Library/Android/sdk/platform-tools/dmtracedump –g output_trace.png traceA.trace


image.png
image.png

函数名(Inclusive,Exclusive,Calls)

(1) 生成trace对比HTML-可以对比出两个trace函数耗时以及调用次数。
/Users/zhouwen/Library/Android/sdk/platform-tools/dmtracedump –d traceA.trace –h traceB.traceB
对比结果:


image.png

4. 线程监控和评测浏览(Update Threads)

Threads可以查看当前进程所有线程的活动状态。


image.png
image.png
Theads说明:

Name:线程名
stime:执行系统逻辑累计耗时
utime:执行用户逻辑累计耗时
Status:线程运行状态
Tid:线程id
id:虚拟机分配的Id

Status状态说明:

Runnable:就绪状态
Wait:等待
Vmwait:等待虚拟机
Native:执行native代码
Sleeping:执行Thread.sleep()后
Starting:线程正在启动
Running:运行状态

四.优化前后效果对比

优化前:

image.png
image.png
image.png

优化后:

image.png

五.建议

网络:

1.移动网络情况下减少发包频率,网络异常重试机制。
2.发送数据量很大的情况下,建议在WiFi环境下进行,发送的数据建议压缩。
3.尽量避免使用静态网络广播,被动接受系统网络广播会消耗电量。

其他:

1.Socket心跳重试机制轮询, 定时器,动效等不需要的时候必须要停止掉。
2.使用WakeLock机制,会是CPU一直处于运行状态,在不需要的时候必须release掉。
3.使用JobScheduler异步任务调度, 可以将一些不紧急的任务放在合适的时机再进行触发,这样可以节省不少电量。
4.Doze模式来限制后台大部分任务运行。

Google官网针对电池续航时间的优化建议:

Google battery opt: https://developer.android.com/training/monitoring-device-state/battery-monitoring

上一篇下一篇

猜你喜欢

热点阅读