理解 Android Battery 信息

本人只是 Android小菜一个,写技术文档只是为了总结本身在最近学习到的知识,历来不敢为人师,若是里面有些不正确的地方请你们尽情指出,谢谢!android

1. 概述

做为一个手机用户,若是问你们最关心手机哪方面的性能,我想手机的待机时长必定会被说起,由于它决定了当前设备还能运行多长时间,也就决定了你还能够无忧无虑地玩耍手机多长时间,大概不会有人愿意每次出门的时候都要担忧本身的手机会不会一下子就没电了。每次有新手机上市的时候,手机的电池容量和待机时间都是必需要提到的要点之一,可见其重要程度。shell

从一个手机生产者的角度来看,一方面尽可能加大其生产设备的电池容量,另外一方面尽可能下降电池电量的消耗。因为受制于工业技术,电池容量不可能无限制地加大,因此如何在一样的电池容量条件下减小电量消耗就成为了每一个手机厂家必须关心的问题。bash

从一个手机程序设计者的角度来看,就要求在进行软件程序设计时尽可能减小对手机电量的消耗,甚至要在电量达到必定临界值的时候关闭某些不重要功能,以维持手机的正常运行,所以在平时工做中,咱们须要可以及时了解当前手机的电池状态以及特定应用对电池电量的消耗状况。less

本文将利用两个简单的dumpsys命令来获取当前手机电池状态和某段时间内电池电量使用状况统计,以帮助Android程序设计者了解当前手机电池状态并设计出低功耗的软件。性能

2. 电池状态

所谓“电池状态”是指当前手机电池的基本状态,包括当前电池是否处于充电状态、当前电量、温度等等,要想获取这些状态,只需经过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

3. 电量使用信息

要想获取电量使用信息,可使用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_locksensor分别运行了多长时间及打开次数和cpu运行时间,这些信息对分析应用耗电状况都很是有用。

4. 总结

本文讲了Android系统中和电池电量相关的dumpsys命令,经过他们能够了解当前电池状态和在一段时间内电池电量的消耗情况,有助于开发者在程序开发过程当中了解本身的应用程序对电量的影响,以时调整并设计出低功耗的应用程序。

相关文章
相关标签/搜索