理解 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命令,經過他們能夠了解當前電池狀態和在一段時間內電池電量的消耗情況,有助於開發者在程序開發過程當中瞭解本身的應用程序對電量的影響,以時調整並設計出低功耗的應用程序。

相關文章
相關標籤/搜索