• 系统功耗跟踪
  • 功耗分析
  • doze模式一直处于关闭状态
  • doze模式开启状态
  • 功耗优化
  • 参考

 

系统功耗跟踪

  • 使用方法,搜集日志
adb shell dumpsys batterystats --reset
//  运行...
adb bugreport bugreport.zip
  • 1
  • 2
  • 3
  • 导入Battery Historian分析
    采集时间从前一天晚上十点到当天早上十点,总共12个小时,手机禁止放置,灭屏状态

参数名

作用

CPU running

CPU的运行状态,是否被唤醒。如果把鼠标放到上面去,还能看到更多的信息,如CPU唤醒的原因。

Screen

亮屏状态,可以看到图表中该项着色有间隔,这是因为实验期间我关闭过屏幕,每关闭一次屏幕,着色就被打断。

Top app

当前最上层的app

Mobile network type

网络类型,其中需要注意的是,“免费网络可能包括wifi、蓝牙网络共享、USB网络共享”

Mobile radio active

移动蜂窝信号 BP侧耗电,通常是指SIM卡,数据链接。该栏过多着色,间隔多。表示功耗也会高。

WiFi supplicant

wifi是否开启

WiFi signal strength

wifi强度

Wifi Running

wifi连接情况下的耗电情况

Audio

音频是否开启

Battery Level

电量

Plugged

是否正在充电,以及鼠标放在上面的时候可以看到充电类型,包括AC(充电器)、USB、其它(例如无线充电)

Battery Level

开始测试时的电量,之前抓取的图可以看到电量是100,满电状态。

Top app

前台应用,如果要分析应用的耗电情况,那么在测试期间,就该保证应用一直处于前台。

Userspace wakelock

记录wake_lock模块的工作时间

功耗分析

doze模式一直处于关闭状态

  • wakelock

    可以看出 wakelock的使用,系统被频繁唤起并持有wakelock的前五项如下(按使用时间排序)
    统计数据如下

Ranking

Name

Uid

Duration / Hr

Count / Hr Minimum

Total Duration

Total Count

0

com.ume.browser : DroiPushService_V2

10031

1m26s742ms

11.63

18m54.015s

152

1

ANDROID_SYSTEM : alarm

1000

1s851ms

14.69

24.203s

192

2

com.asksven.betterbatterystats : BBS_WAKELOCK_WHILE_SAVING_REF

10102

340ms

0.08

4.446s

1

3

ANDROID_SYSTEM : IpReachabilityMonitor.wlan0

1000

268ms

0.08

3.506s

1

4

com.ss.android.article.news : job/com.ss.android.account.AccountProvider/com.ss.android.article.news/今日头条:android

10096

132ms

3.75

1.73s

49

其中com.ume.browser : DroiPushService_V2唤醒时间最长达18min

- JobScheduler

android系统功耗 android功耗分析_android系统功耗

doze模式开启状态

在低电耗模式下,您的应用会受到以下限制:

  • wakelock
  • android系统功耗 android功耗分析_wifi连接_02

  • JobScheduler
  • android系统功耗 android功耗分析_android系统功耗_03

doze模式下所有的wakelock会被忽略,网络暂停,alarm会被推迟到下一个maintenance window,job被禁止
只会在maintenance window期间才会使用网络和执行挂起的任务

功耗优化

从上面的图中可以看出影响手机功耗的主要是wakelock,JobScheduler,alarm,GPS,wifi等,针对这些情况功耗优化可以从以下几个方面入手
- 使能doze模式(需要motion sensor支持,doze第一阶段不需要motion sensor),在手机处于完全禁止待机的时候,doze模式对手机的功耗很有帮助,doze模式下会影响全局的wakelock,alarm,job,网络等
- 将有限制条件出发的service更换为JobScheduler,因为在创建JobScheduler时可以设置相应的触发条件才执行(比如条件 需要连网状态需要充电状态),触发条件交由系统来管理
- wakelock.acquice()方法最好带超时参数,因为有些网络请求很慢导致系统一直持续wake状态
- 监听电池电量和充电状态来决定后台更新
- 监测联网状态,重复闹铃和后台服务的一些最常见用途是安排定期从互联网资源、缓存数据更新应用数据,或者执行长时间下载,如果监测到没有网络连接就不要唤醒设备
- 对于流氓软件频繁后台唤醒可以采用心跳对齐(alarm)

参考

Android Performance Patterns