Android功耗分析

系统功耗跟踪

  • 使用方法,搜集日志
adb shell dumpsys batterystats --reset
//  运行...
adb bugreport bugreport.zip
  • 导入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
这里写图片描述

doze模式开启状态

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

  • wakelock
    这里写图片描述

  • JobScheduler
    这里写图片描述

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

猜你喜欢

转载自blog.csdn.net/xiabodan/article/details/80266464