本人只是 Android小菜一个,写技术文档只是为了总结本身在最近学习到的知识,历来不敢为人师,若是里面有些不正确的地方请你们尽情指出,谢谢!android
做为一个手机用户,若是问你们最关心手机哪方面的性能,我想手机的待机时长必定会被说起,由于它决定了当前设备还能运行多长时间,也就决定了你还能够无忧无虑地玩耍手机多长时间,大概不会有人愿意每次出门的时候都要担忧本身的手机会不会一下子就没电了。每次有新手机上市的时候,手机的电池容量和待机时间都是必需要提到的要点之一,可见其重要程度。shell
从一个手机生产者的角度来看,一方面尽可能加大其生产设备的电池容量,另外一方面尽可能下降电池电量的消耗。因为受制于工业技术,电池容量不可能无限制地加大,因此如何在一样的电池容量条件下减小电量消耗就成为了每一个手机厂家必须关心的问题。bash
从一个手机程序设计者的角度来看,就要求在进行软件程序设计时尽可能减小对手机电量的消耗,甚至要在电量达到必定临界值的时候关闭某些不重要功能,以维持手机的正常运行,所以在平时工做中,咱们须要可以及时了解当前手机的电池状态以及特定应用对电池电量的消耗状况。less
本文将利用两个简单的dumpsys
命令来获取当前手机电池状态和某段时间内电池电量使用状况统计,以帮助Android
程序设计者了解当前手机电池状态并设计出低功耗的软件。性能
所谓“电池状态”是指当前手机电池的基本状态,包括当前电池是否处于充电状态、当前电量、温度等等,要想获取这些状态,只需经过adb shell dumpsys battery
命令便可。学习
Current Battery Service state:
AC powered: false
USB powered: true
Wireless powered: false
Max charging current: 500000
Max charging voltage: 5000000
Charge counter: -3085480
status: 2
health: 2
present: true
level: 67
scale: 100
voltage: 4046
temperature: 230
technology: Li-ion
复制代码
这个结果是小菜获取到本身测试手机的电池状态,每一项的含义也比较容易理解,这里直接经过一个表格对其中比较重要信息加以说明:测试
字段 | 含义 | 取值 | 备注 |
---|---|---|---|
AC powered | 是否处理直充状态 | true/false | |
USB powered | 是否处理 USB 充电状态 | true/false | |
Wireless powered | 是否处于无线充电状态 | true/false | |
Max charging current | 最大电流 | 未定,和具体设备有关。 | |
Max charging voltage | 最大电压 | 未定,和具体设备有关。 | |
status | 电池状态 | 1:unknown, 2:charging, 3:discharging, 4:not_charging, 5:full | 参考 BatteryManager |
health | 电池健康状态 | 1:unknown, 2:good, 3:overheat, 4:dead, 5:over_voltage, 6:unspecified_failure, 7: cold | 参考 BatteryManager |
level | 电池电量百分比 | 0-scale | |
scale | 电池电量最大值 | 默认都是 100 | |
voltage | 当前电压 | 0-max voltage | |
temperature | 当前温度 | 未定 | 除以10获得摄氏温度 |
technology | 电池类型 | 未定 |
可使用
dumpsys set
方法来手动设置某些状态信息,例如adb shell dumpsys battery set level 100
能够把当前的电量设置为 100%,感兴趣的同窗能够自行学习。ui
要想获取电量使用信息,可使用adb shell dumpsys batterystats
,因为这个命令会显示一段时间内全部的电量消耗过程以及各类分类统计,信息量很大,建议在使用过程当中能够把信息单独保存在一个文件中,再慢慢分析。spa
正是因为batterystats
可以显示的信息不少,也有不一样的分类组织方式,第一次接触的同窗可能会感到很疑惑,面对大量信息一会儿不知道该如何下手,在这里小菜就列举一些我的认为比较重要的“信息段”,但愿能在实际工做中对你们有所帮助。设计
reset
到此次dumpsys
的时间内电量消耗过程:Battery History (6% used, 15KB used of 256KB, 53 strings using 4478):
0 (10) RESET:TIME: 2019-03-15-17-22-44
0 (2) 100 status=discharging health=good plug=none temp=270 volt=4344 charge=-3238 +running +wake_lock +screen phone_state=emergency phone_signal_strength=great brightness=dim +wifi_running +wifi top=u0a23:"com.android.launcher"
0 (2) 100 user=0:"0"
0 (3) 100 +wifi_scan phone_signal_strength=none userfg=0:"0"
+149ms (2) 100 -wifi_scan phone_signal_strength=great brightness=medium
+5s998ms (2) 100 -wake_lock -screen
+6s043ms (4) 100 volt=4319 charge=-3239 +wake_lock=1001:"RILJ" brightness=dark
+6s087ms (1) 100 -wake_lock
+6s579ms (2) 100 +wake_lock=1000:"startDream" wake_reason=0:"Abort:Pending Wakeup Sources: PowerManagerService.Broadcasts PowerManagerService.WakeLocks "
+6s884ms (1) 100 -wake_lock
+6s960ms (2) 100 +wake_lock=u0a16:"Wakeful StateMachine: GeofencerStateMachine"
+6s962ms (1) 100 -wake_lock
+6s997ms (2) 100 +wake_lock=u0a16:"NlpWakeLock"
+6s999ms (1) 100 -running -wake_lock
+37s150ms (2) 100 +running +wake_lock=1000:"*walarm*:WifiConnectivityManager Schedule Watchdog Timer" +wifi_scan wake_reason=0:"unknown"
+37s316ms (1) 100 -wake_lock -wifi_scan
+38s184ms (2) 100 +wake_lock=u0a16:"NlpWakeLock"
+38s195ms (1) 100 -wake_lock
+38s196ms (2) 100 +wake_lock=u0a16:"CMWakeLock"
+38s236ms (1) 100 -wake_lock
复制代码
这段信息首先会显示电池的一些基本状态,例如是否充电、健康情况、温度,电压等等,而后再按照时间顺序显示整个电量的消耗过程,即在什么时间因为何种缘由耗电以及当时的电量状况,对于开发者分析电量的消耗缘由有很是重大的意义。
+38s184ms (2) 100 +wake_lock=u0a16:"NlpWakeLock"
复制代码
这个信息代表了在+38s184ms
时刻u0a16
因为申请wake_lock
而产生了耗电行为,当时的电量是100
.
Estimated power use (mAh):
Capacity: 3900, Computed drain: 730, actual drain: 156-195
Idle: 470 Excluded from smearing
Cell standby: 235 ( radio=235 ) Excluded from smearing
Uid u0a39: 8.64 ( cpu=0.187 sensor=8.45 ) Excluded from smearing
Uid 1000: 7.70 ( cpu=7.59 sensor=0.108 ) Excluded from smearing
Uid 0: 5.43 ( cpu=5.43 ) Excluded from smearing
Screen: 1.12 Excluded from smearing
Wifi: 0.982 ( cpu=0.236 wifi=0.746 ) Including smearing: 1.52 ( proportional=0.534 )
Uid 1001: 0.414 ( cpu=0.414 ) Excluded from smearing
Uid u0a16: 0.332 ( cpu=0.332 ) Including smearing: 0.513 ( proportional=0.181 )
Uid u0a99: 0.253 ( cpu=0.253 ) Including smearing: 0.390 ( proportional=0.138 )
Uid u0a119: 0.141 ( cpu=0.141 ) Including smearing: 0.218 ( proportional=0.0768 )
复制代码
这段信息首先会显示电池的容量以及这段时间内的消耗量,而后再显示不一样应用在这段时间内的耗电量以及耗电缘由。
Uid u0a39: 8.64 ( cpu=0.187 sensor=8.45 ) Excluded from smearing
复制代码
这个信息代表Uid u0a39
在这段时间内消耗了 8.64毫安
电量,其中 cpu
消耗了 0.187毫安
,sensor
消耗了8.45毫安
。
u0a39:
Wake lock *alarm*: 16ms partial (2 times) max=10 realtime
Wake lock AudioMix realtime
Wake lock *vibrator* realtime
Wake lock show keyguard realtime
Wake lock Doze: 245ms partial (1 times) max=262 actual=262 realtime
Wake lock WindowManager realtime
Wake lock lockoutResetCallback realtime
TOTAL wake: 261ms blamed partial, 278ms actual partial realtime
Sensor 21: 1d 22h 57m 15s 564ms realtime (0 times)
Fg Service for: 1d 22h 57m 15s 564ms
Total running: 1d 22h 57m 15s 564ms
Total cpu time: u=3s 490ms s=730ms
Proc com.android.systemui:
CPU: 21s 110ms usr + 4s 860ms krn ; 0ms fg
Apk com.android.systemui:
Wakeup alarm *walarm*:com.android.systemui.newday: 2 times
Service com.android.systemui.doze.DozeService:
Created for: 0ms uptime
Starts: 0, launches: 2
复制代码
这个信息代表u0a39
应用在存在期间wake_lock
和sensor
分别运行了多长时间及打开次数和cpu
运行时间,这些信息对分析应用耗电状况都很是有用。
本文讲了Android
系统中和电池电量相关的dumpsys
命令,经过他们能够了解当前电池状态和在一段时间内电池电量的消耗情况,有助于开发者在程序开发过程当中了解本身的应用程序对电量的影响,以时调整并设计出低功耗的应用程序。