理解 Android Battery 信息
本人只是 Android小菜一个,写技术文档只是为了总结自己在最近学习到的知识,从来不敢为人师,如果里面有些不正确的地方请大家尽情指出,谢谢!
1. 概述
作为一个手机用户,如果问大家最关心手机哪方面的性能,我想手机的待机时长一定会被提及,因为它决定了当前设备还能运行多长时间,也就决定了你还可以无忧无虑地玩耍手机多长时间,大概不会有人愿意每次出门的时候都要担心自己的手机会不会一会儿就没电了。每次有新手机上市的时候,手机的电池容量和待机时间都是必须要提到的要点之一,可见其重要程度。
从一个手机生产者的角度来看,一方面尽量加大其生产设备的电池容量,另一方面尽量降低电池电量的消耗。由于受制于工业技术,电池容量不可能无限制地加大,所以如何在同样的电池容量条件下减少电量消耗就成为了每个手机厂家必须关心的问题。
从一个手机程序设计者的角度来看,就要求在进行软件程序设计时尽量减少对手机电量的消耗,甚至要在电量达到一定临界值的时候关闭某些不重要功能,以维持手机的正常运行,因此在平时工作中,我们需要能够及时了解当前手机的电池状态以及特定应用对电池电量的消耗情况。
本文将利用两个简单的dumpsys
命令来获取当前手机电池状态和某段时间内电池电量使用情况统计,以帮助Android
程序设计者了解当前手机电池状态并设计出低功耗的软件。
2. 电池状态
所谓“电池状态”是指当前手机电池的基本状态,包括当前电池是否处于充电状态、当前电量、温度等等,要想获取这些状态,只需通过adb shell dumpsys battery
命令即可。
Current Battery Service state:AC powered: falseUSB powered: trueWireless powered: falseMax charging current: 500000Max charging voltage: 5000000Charge counter: -3085480status: 2health: 2present: truelevel: 67scale: 100voltage: 4046temperature: 230technology: 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%,感兴趣的同学可以自行学习。
3. 电量使用信息
要想获取电量使用信息,可以使用adb shell dumpsys batterystats
,由于这个命令会显示一段时间内所有的电量消耗过程以及各种分类统计,信息量很大,建议在使用过程中可以把信息单独保存在一个文件中,再慢慢分析。
正是由于batterystats
能够显示的信息很多,也有不同的分类组织方式,第一次接触的同学可能会感到很疑惑,面对大量信息一下子不知道该如何下手,在这里小菜就列举一些个人认为比较重要的“信息段”,希望能在实际工作中对大家有所帮助。
- 电量消耗历史:记录从上次
reset
到这次dumpsys
的时间内电量消耗过程:
Battery History (6% used, 15KB used of 256KB, 53 strings using 4478):0 (10) RESET:TIME: 2019-03-15-17-22-440 (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-195Idle: 470 Excluded from smearingCell standby: 235 ( radio=235 ) Excluded from smearingUid u0a39: 8.64 ( cpu=0.187 sensor=8.45 ) Excluded from smearingUid 1000: 7.70 ( cpu=7.59 sensor=0.108 ) Excluded from smearingUid 0: 5.43 ( cpu=5.43 ) Excluded from smearingScreen: 1.12 Excluded from smearingWifi: 0.982 ( cpu=0.236 wifi=0.746 ) Including smearing: 1.52 ( proportional=0.534 )Uid 1001: 0.414 ( cpu=0.414 ) Excluded from smearingUid 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 realtimeWake lock AudioMix realtimeWake lock *vibrator* realtimeWake lock show keyguard realtimeWake lock Doze: 245ms partial (1 times) max=262 actual=262 realtimeWake lock WindowManager realtimeWake lock lockoutResetCallback realtimeTOTAL wake: 261ms blamed partial, 278ms actual partial realtimeSensor 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 fgApk com.android.systemui:Wakeup alarm *walarm*:com.android.systemui.newday: 2 timesService com.android.systemui.doze.DozeService:Created for: 0ms uptimeStarts: 0, launches: 2
复制代码
这个信息表明u0a39
应用在存在期间wake_lock
和sensor
分别运行了多长时间及打开次数和cpu
运行时间,这些信息对分析应用耗电情况都非常有用。
4. 总结
本文讲了Android
系统中和电池电量相关的dumpsys
命令,通过他们可以了解当前电池状态和在一段时间内电池电量的消耗状况,有助于开发者在程序开发过程中了解自己的应用程序对电量的影响,以时调整并设计出低功耗的应用程序。
理解 Android Battery 信息相关推荐
- Android Battery信息
电池 检测设备相关硬件数据. Battery 获取电池信息,需要注册 Intent.ACTION_BATTERY_CHANGED 获取系统电池状态. 是否有电池 通过Intent.ACTION_BAT ...
- android堆栈信息,android死锁致重启问题分析
摘自:http://www.2cto.com/kf/201207/142853.html 使用过Android的同学,尤其是用过山寨pad,应该对Android的重启问题印象深刻吧.Android由于 ...
- [深入理解Android卷一全文-第九章]深入理解Vold和Rild
为什么80%的码农都做不了架构师?>>> 由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的 ...
- [深入理解Android卷二 全文-第五章]深入理解PowerManagerService
由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容 第 ...
- [深入理解Android卷一全文-第四章]深入理解zygote
由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容. ...
- 《深入理解Android 卷III》第七章 深入理解SystemUI
<深入理解Android 卷III>即将发布,作者是张大伟.此书填补了深入理解Android Framework卷中的一个主要空白,即Android Framework中和UI相关的部分. ...
- 《深入理解Android:Wi-Fi,NFC和GPS》章节连载[节选]--第二章 深入理解Netd
原文: http://blog.csdn.net/innost/article/details/20400389 本文使用的源码版本为Android5.1 本章主要内容 介绍Netd; 介绍MDNS和 ...
- 理解Android编译命令(转)
一.引言 关于Android Build系统,这个话题很早就打算整理下,迟迟没有下笔,决定跟大家分享下.先看下面几条指令,相信编译过Android源码的人都再熟悉不过的. source setenv. ...
- android 浏览器源码分析,从源码出发深入理解 Android Service
原标题:从源码出发深入理解 Android Service 原文链接: 建议在浏览器上打开,删除了大量代码细节,:) 本文是 Android 系统学习系列文章中的第三章节的内容,介绍了 Android ...
最新文章
- 简单又实用的分享!SharePoint母版页引用(实战)
- Java中的单利模式介绍
- Linux 上的几个命令 dd, mv, rename
- 学计算机怎样才能考上大学,中国式家长考清华北大方法 重点大学怎么才能考上...
- 视觉注意力机制(上)
- 想要换壁纸,看这个网站就够了!
- 分形之科赫(Koch)雪花
- 解决ssh登录Host key verification failed
- SQL语句 常用语句
- 三方集成 - 友盟分享总结
- html生成word页眉图片不显示,Word首页不显示页眉怎么设置
- 惠普服务器开机无限重启,电脑开机无限重启的解决方法
- 首届西瓜PLAY视频嘉年华狂欢来袭,万张门票几近售罄
- CH9101芯片应用—硬件设计指南
- Socket和ServerSocket(建立客户端和服务器端)
- 邮件服务器(eas)找不到服务器,Exchange ActiveSync 无法访问邮箱服务器上的邮箱,因为邮箱服务器处于脱机状态...
- cumulus(浑天仪)使用手册
- 视频教程-直通企业的数据仓库处理术—启动篇-大数据
- UnicodeDecodeError: 'gb18030' codec can't decode byte 0xeb in position 7: incomplete multibyte seque
- Android 二维码 生成和识别(附Demo源码)