一、Battery HistorianBatterystats是包含在 Android 框架中的一种工具用于收集设备上的电池数据。您可以使用adb bugreport命令抓取日志将收集的电池数据转储到开发机器并生成可使用 Battery Historian 分析的报告。Battery Historian 会将报告从 Batterystats 转换为可在浏览器中查看的 HTML 可视化内容。适合的场景显示进程从什么位置以及通过何种方式消耗电池电量识别系统为了延长电池续航时间可能会延迟甚至移除应用中的哪些任务。当设备在使用电池的时候它可以使开发者们看到系统级和应用级事件图表在图表时间轴上可以缩放和平移能够直观的看到自上一次充满电到现在设备电池的统计汇总信息它可以选中一个应用程序来检查该应用影响电池电量的一些参数并且可以对比两个bugreport文件信息分析并对其电池关键区别点做高亮显示。Battery Historian的安装可以参考https://download.csdn.net/blog/column/11547800/108662887其他参考Android性能优化系列之电量优化_android 电量优化-CSDN博客1、Show BAR图形化界面但是通常企业里面基本上都搭建了所以直接使用解析bugreport文件就行了解析后主界面如下右上角通常选择Battery Level即中间会出现一根黑线那根黑线就是剩余电量左侧纵轴为一些比较关键的字段把鼠标移动到上面会自动显示相关说明底部横轴为时间线可以通过鼠标轮滑来放大和缩小且时间比较精准每个字段都来自bugreport里面的那一段日志可以讲鼠标放到旁边查看详细介绍CPU running/RebootCPU running信息来源于日志Battery History。CPU running表示设备上 CPU 处于活动状态非休眠状态的时间。这是指 CPU 在处理各种任务时所花费的时间包括应用程序的执行、系统服务的处理以及其他系统任务。CPU running 时间通常用于衡量设备在特定时间段内的活动水平以便评估设备的能耗情况。如上图表示CPU持续运行了45小时所以这里的CPU running还并不像性能分析里面的轮询片段Reboot表示设备是否处于关机状态如果为on表示此时关机或者休眠注意这里不是reboot的这个事件他和CPU running刚好出现反比如果它为on其他字段基本上都是空的如下截图App Processor wakeupApp Processor wakeup 信息来源于日志Battery History。在 Battery Historian 中App Processor wakeup 表示应用处理器通常是设备上的主 CPU从睡眠状态唤醒的次数。当应用处理器从睡眠状态唤醒时它需要消耗额外的电量来执行任务这可能会导致设备的电池消耗增加。App Processor wakeup 是一个重要的指标用于衡量应用程序或系统活动导致应用处理器频繁唤醒的情况。频繁的唤醒事件可能表明有一些应用程序或系统服务在不必要地唤醒设备从而导致电池消耗增加。这可能是由于应用程序执行了过多的后台任务、使用了不当的定时器或触发器或者存在其他导致设备频繁唤醒的问题。个人理解此字段表示应用进程被唤醒的次数当然这里的应用进程可能是前台进程也可能是后台进程。如上图表示此时间点wisemine应用被唤醒一次但是注意如果缩短时间轴他会把相近的几次组合即如上三个点表示三次被唤醒合在一起如下Bugreport保存此字段的原理可以参考BugReport中的App Processor wakeup字段意义-CSDN博客Kernel only uptimeKernel only uptime 信息来源于日志Generated。在 Battery Historian 中Kernel only uptime 表示设备的内核Kernel仅处于运行状态而不是睡眠状态的时间。内核是操作系统的核心组件负责管理系统资源、处理任务调度、驱动设备等。当内核处于运行状态时设备通常会消耗更多的电量。Kernel only uptime 是一个重要的指标用于了解设备内核在特定时间段内的活动水平。较长的 Kernel only uptime 可能表明设备的内核在处理各种系统任务时一直处于活动状态这可能会导致额外的能源消耗影响设备的电池寿命。通常可以通过此字段来判断是否底层导致。Userspace wakelockUserspace wakelock记录Android 中PowerManagerService 的wake_lock 模块的工作时间(有任务需要唤醒CPU 时就会开启Userspace wakelock)。其实就是PMS的应用锁申请状态。Userspace wakelock信息来源于日志Battery History在bugreport里面打印如下#dump PMS服务的Wake Lock日志 Wake Lock Log 04-14 09:10:14.271 - 1001 - ACQ RILJ_ACK_WL (partial) 04-14 09:10:14.473 - 1001 - REL RILJ_ACK_WL 04-14 09:10:18.721 - 1000 - ACQ *alarm* (partial) 04-14 09:10:18.763 - 1000 - REL *alarm* 04-14 09:10:18.901 - 1000 - ACQ NetworkStats (partial) 04-14 09:10:18.918 - 1000 - REL NetworkStats 04-14 09:10:22.333 - 1000 - ACQ NetworkStats (partial) .......... #dump batterystats服务 DUMP OF SERVICE batterystats: Service host process PID: 2256 Threads in use: 0/32 Client PIDs: 1682, 23603, 12938, 4270, 11370, 11100, 3244, 1511, 5321, 3364, 1273, 3271, 4942, 2906, 776 Battery History (48% used, 1985KB used of 4096KB, 1490 strings using 86KB): 0 (14) RESET:TIME: 2025-04-11-18-00-11 0 (2) 083 c2981a21 tmpwhitelistu0a184:sync by top app #重置Battery历史记录 86ms (2) 083 c2981a21 stats0:reset 2s873ms (2) 083 c2981a21 wake_lock_in1000:NetworkStats 2s887ms (2) 083 c2981a21 -wake_lock_in1000:NetworkStats 4s537ms (2) 083 ca981a21 wake_lock_in1001:*telephony-radio* #记录的事件可能多种不仅仅是wake_lock_in #通用格式是 时间错(与重置reset之间的差异) 事件 详情 2d15h57m34s031ms (2) 046 c4981a21 wake_lock_in1001:*telephony-radio* 2d15h57m34s031ms (2) 046 c4981a21 stats0:dump 2d15h57m34s032ms (2) 046 c4981a21 -wake_lock_in1001:*telephony-radio*如上这里的total duration计算不准后面发现这里的值为action event times里面记录的所有时间段相减得到的一个总值因此第如果后面记录的时间段太多那么total duration就会得到一个很大的值Long WakelocksLong Wakelocks记录长时间斥锁wake_lock 的进程。Screen通过监视 Battery Historian 中的 Screen 数据用户可以了解设备屏幕的使用情况包括屏幕开启时长、亮度变化等信息。这有助于用户评估自己的屏幕使用习惯以及了解哪些应用程序或活动可能导致屏幕开启时间过长从而影响设备的电池寿命。如上图红色表示屏幕是亮起来的白色表示屏幕没有亮起来放大时间轴之后能够清晰的得到屏幕亮起来的原因和时长Top app在 Battery Historian 中Top app 表示在特定时间段内消耗最多电量的应用程序。这个指标可以帮助用户和开发人员了解哪些应用程序在设备上消耗了大量的电量从而帮助他们识别可能导致电池耗尽的应用程序或活动。通过监视 Battery Historian 中的 Top app 数据用户可以查看哪些应用程序在特定时间段内使用了大量的电量。这有助于用户优化其应用程序使用习惯可能会减少对电量消耗较高的应用程序的使用或者寻找更节能的替代方案。如上图表示在此时间点最活跃的几个应用按照持续时间排名放大时间轴会发现这里同样会被合并PS此项如果以点的形式表现通常没有太大的意义可能是待机状态下突然亮屏或者某个应用突然启动起来但是如果持续时间很长就能够证实对应的应用可能存在异常因为持续很长时间在持续耗电。Foreground process在 Battery Historian 中Foreground process 表示在设备上处于前台运行状态的进程或应用程序。前台进程通常是用户当前正在与之交互的应用程序因为用户正在使用这些应用程序它们通常会占用更多的系统资源包括 CPU、内存和电量。这个是指的前台进程表示当前在设备上处于前台运行状态的进程或应用程序。这些是用户当前正在与之交互的应用程序它们通常会占用更多的系统资源和电量。但是top app不一样他无法指示对应应用在后台一直运行或者一直占用系统资源他只能说明当时他瞬间消耗的电流比较高而已。如上表示对应的三个进程一直在占用系统资源持续45小时值得注意的是如果状态有所改变Historian会自动区分颜色JobScheduler在 Battery Historian 中JobScheduler 是指 Android 系统中的一个调度器用于在设备空闲时执行后台任务。JobScheduler 允许应用程序安排需要在后台执行的作业或任务以便在系统资源可用时进行处理从而提高电量效率和系统性能。通过使用 JobScheduler开发人员可以利用系统优化功能将多个后台任务聚合在一起执行从而减少设备唤醒次数节省电量并减少对系统资源的占用。这有助于避免应用程序在不必要的时候频繁唤醒设备从而提高设备的电池寿命。PS即JobSchedule的宗旨就是把一些不是特别紧急的任务放到更合适的时机批量处理。但是感觉他对日常分析好像没有什么太大的作用Activity Manager Proc在 Battery Historian 中Activity Manager Proc 是指 Android 系统中的一个关键组件用于管理应用程序进程和活动。Activity Manager Proc 负责跟踪和管理应用程序的进程生命周期、活动状态以及与系统资源的交互。通过监视 Activity Manager Proc 数据可以了解应用程序在设备上的运行情况包括其进程的创建、销毁、活动状态的变化等。这些信息对于分析应用程序的性能、资源利用情况以及对设备电量消耗的影响非常重要。如上截图红色的表示对应进程死亡的瞬间绿色表示对应进程被启动同样如果时间轴比较小他会把这些圆点进行组合AM Low Memory / ANRAM Low Memory 表示 Android 系统的 Activity Manager 在低内存条件下的一种状态。在这种情况下系统可能会采取一些措施来释放内存例如终止一些后台进程、清理缓存等以确保系统的稳定性和性能。其中Num Process 的数值表示在低内存条件下 Activity Manager 监视的当前进程数量。这个指标可以帮助开发人员了解系统在低内存状态下所管理的进程数量以及系统在释放内存时可能终止的进程数量。DozeDoze 表示设备的省电模式。省电模式是 Android 系统提供的一种功能旨在延长设备的电池寿命通过限制应用程序的后台活动来减少电量消耗。以下是 Doze 中常见的三种状态及其含义Doze Off表示设备的省电模式已关闭设备未进入任何省电模式。在 Doze Off 状态下设备不会应用省电模式的限制应用程序可以自由运行而不受 Doze 模式的影响。Light Doze表示设备处于轻度睡眠模式。在 Light Doze 状态下系统会限制某些后台活动以节省电量但仍允许应用程序在一定程度上保持活动状态。Full Doze表示设备处于深度睡眠模式。在 Full Doze 状态下系统会极大限制应用程序的后台活动包括网络访问和同步操作以最大程度地减少电量消耗。通常为了降低功耗我们希望要求设备在禁止待机状态下更多的处于深度睡眠模式即PMS原生逻辑在禁止状态没有任何输入和用户锁的情况下是否能够进入浅度睡眠模式进入之后又会有一些条件判断是否能够进入深度睡眠模式进入深度睡眠模式之后后台被限制后台网络同步操作将在一个固定的周期时间点触发这样大大节约功耗。如果去掉Full Doze模式那么后台任务将会频繁被唤起大大提升功耗可以参考后面案例。Phone state‌在Battery Historian中Phone state表示手机通话状态包括是否正在通话、接听来电、拨出电话in表示设备处于通话状态即设备正在进行电话通话或有电话呼入的状态。out表示设备处于拨打电话状态即设备正在拨打电话。off表示设备处于电话关闭状态即设备的电话功能处于关闭状态没有电话呼入或呼出的情况这些不同的状态可以帮助开发人员更好地了解设备在电话功能方面的运行状态有助于诊断和解决与通信功能相关的问题。如上截图可以了解到黑色的in表示当前设备正在通话中黄色的out表示当前设备正在拨打电话Phone scanning在 bugreport 中Phone scanning 表示设备正在进行电话扫描的操作。电话扫描是指设备在搜索可用的移动网络信号或其他通信信号的过程。这个信息可以帮助开发人员了解设备在扫描网络信号方面的状态。off表示电话扫描功能处于关闭状态即设备当前未在进行网络信号的扫描。on表示电话扫描功能处于开启状态即设备正在主动进行网络信号的扫描以便连接到可用的网络信号。Network connectivityNetwork connectivity表示网络连接类型总共如下几种类型我们接触多的通常WIFI/MOBLE/VPN分别表示当前使用的wifi网络/移动网络/VPN网络有时候可能同时使用了几种网络如下图就会换一种颜色来表示鼠标放到上面有详细的列表显示当前使用的网络类型Mobile signal strength/Wifi signal strengthMobile signal strength表示移动数据信号是否稳定白色为none表示没有开启移动网络黄色为good表示网络比较好poor就表示网络比较差这种情况下就越耗电Wifi signal strength表示wifi信号是否稳定同上在poor就表示当前wifi信号不稳定这种情况下会持续耗电Wifi scan/Wifi on/Wifi radioWifi ON表示当前时间段wifi功能是否打开和settings菜单里面的wifi开关一致Wifi radio表示当前时间段wifi硬件是否处于激活状态注意和wifi功能进行区分Wifi scan表示当前时间段wifi模块有没有进行wifi扫描通常wifi扫描越频繁就越耗电Wifi supplicant在 Android 系统中bugreport 是一个用于收集设备信息、日志和其他诊断数据的工具。在 bugreport 报告中Wifi supplicant 是指与 Wi-Fi 连接相关的组件该组件负责处理设备与 Wi-Fi 网络之间的通信。以下是 Wifi supplicant 在 bugreport 中可能出现的一些值以及它们的含义SCANNING表示 Wi-Fi supplicant 正在扫描可用的 Wi-Fi 网络。在这种状态下设备正在搜索可用的 Wi-Fi 热点。ASSOCIATING表示设备正在尝试与选定的 Wi-Fi 网络建立连接。在这个阶段设备正在与 Wi-Fi 热点进行握手和认证过程。ASSOCIATED表示设备已经成功与 Wi-Fi 网络建立连接。设备与 Wi-Fi 网络之间已经建立了通信通道。AUTHENTICATING表示设备正在进行 Wi-Fi 网络的认证过程。在这个阶段设备正在验证其身份以获得对 Wi-Fi 网络的访问权限。COMPLETED表示设备已成功连接到 Wi-Fi 网络并已准备好进行数据传输。DISCONNECTED表示设备与 Wi-Fi 网络的连接已断开。这可能是由于信号弱、网络故障或用户手动断开连接等原因导致的。这些状态可能同时存在但是状态存在改变的时候颜色肯定会不一样如下GPS/SensorSensor和GPS的值都是on和offon表示该模块处于开启工作状态Coulomb charge/Battery Level/TemperatureCoulomb charge表示设备的电荷状态描述电池的充电量或放电量看起来单位是mAh并随着剩余电量的降低这个值越小颜色越淡它和Battery Level成正比Battery Level表示当前剩余电量的百分比从密集程度可以了解到好点是否均匀它和电池曲线存在一些关联Temperature表示设备当前温度颜色越深说明温度越高2、App Selection应用排行榜除了上面介绍的一些图形化能够清晰的让我们了解到设备的一些列相关参数的情况之外还可以通过中间部分的App Selection来对应用进行各种相关参数的排行榜Device estimated power useDevice estimated power use描述的是各个应用进程的使用的电量并从高到低给他们进行排序其数据来源于bugreport里面的Estimated power use字段。如下案例bugreport和排行榜显示第一个应用耗电占比15%。Estimated power use (mAh): Capacity: 8000, Computed drain: 2960, actual drain: 2800-2960 Global screen: 60.5 apps: 60.5 duration: 29m 10s 609ms cpu: 130 apps: 130 system_services: 40.0 apps: 40.0 mobile_radio: 1469 apps: 1327 duration: 19h 39m 8s 307ms sensors: 2.35 apps: 2.35 wifi: 84.6 apps: 10.8 duration: 2d 11h 19m 29s 219ms wakelock: 183 apps: 2.51 duration: 2d 15h 11m 27s 57ms phone: 0.830 apps: 0 duration: 17s 277ms idle: 185 apps: 0 duration: 2d 15h 40m 37s 666ms UID u0a99: 1224 fg: 1223 ( cpu1.94 (10m 1s 526ms) cpu:fg1.94 (6m 22s 561ms) system_services0.896 mobile_radio1220 (16h 25m 0s 942ms) mobile_radio:fg1220 wifi0.577 (16s 580ms) wifi:fg0.577 wakelock0.00613 (7s 614ms) ) UID 0: 279 fg: 0.0189 ( cpu51.2 (4h 51m 45s 774ms) mobile_radio46.7 (37m 41s 370ms) wifi0.0189 (437ms) wifi:fg0.0189 wakelock181 (2d 14h 19m 33s 15ms) ) UID u0a105: 44.5 fg: 0.114 fgs: 0.0278 ( screen44.2 (20m 13s 426ms) cpu0.142 (1m 11s 129ms) cpu:fg0.114 (22s 367ms) cpu:fgs0.0278 (5s 478ms) system_services0.0998 ) UID u0a133: 30.4 fg: 0.144 fgs: 4.79 ( cpu4.94 (41m 27s 118ms) cpu:fg0.144 (28s 350ms) cpu:fgs4.79 (15m 43s 192ms) audio0 (8s 319ms) system_services25.4 wakelock0.0215 (26s 628ms) ) UID u0a107: 21.6 fgs: 21.6 ( cpu21.6 (1h 35m 46s 515ms) cpu:fgs21.6 (1h 10m 42s 546ms) system_services0.0131 ) UID 1073: 15.7 fg: 15.5 ( cpu0.156 (1m 5s 581ms) cpu:fg0.156 (30s 654ms) mobile_radio15.0 (12m 7s 167ms) mobile_radio:fg15.0 wifi0.284 (8s 277ms) wifi:fg0.284 wakelock0.294 (6m 5s 406ms) ) UID u0a176: 15.7 fg: 0.0184 bg: 0.0323 cached: 0.535 ( screen15.0 (6m 52s 226ms) cpu0.00567 (25s 369ms) cpu:fg0.00254 (500ms) cpu:bg0.000422 (83ms) cpu:cached0.00271 (533ms) system_services0.00602 mobile_radio0.580 (28s 89ms) mobile_radio:fg0.0159 mobile_radio:bg0.0319 mobile_radio:cached0.532 wakelock0.129 (2m 40s 396ms) ) UID u0a184: 12.9 bg: 2.63 cached: 9.86 ( cpu0.284 (2m 35s 617ms) cpu:bg0.0912 (17s 938ms) cpu:cached0.177 (34s 862ms) system_services0.0984 mobile_radio11.9 (9m 36s 360ms) mobile_radio:bg2.52 mobile_radio:cached9.38 wifi0.321 (9s 430ms) wifi:bg0.0177 wifi:cached0.300 wakelock0.296 (6m 7s 58ms) ) UID u0a185: 12.4 bg: 0.986 cached: 11.0 ( cpu0.197 (2m 4s 980ms) cpu:bg0.0888 (17s 471ms) cpu:cached0.108 (21s 323ms) system_services0.0853 mobile_radio11.6 (9m 19s 365ms) mobile_radio:bg0.857 mobile_radio:cached10.7 wifi0.276 (8s 123ms) wifi:bg0.0401 wifi:cached0.236 wakelock0.288 (5m 57s 847ms) ) UID u0a80: 9.54 fg: 0.567 ( cpu0.567 (6m 46s 478ms) cpu:fg0.567 (1m 51s 598ms) system_services8.97 ) UID u0a174: 6.97 bg: 1.35 cached: 5.00 ( cpu0.0809 (1m 17s 215ms) cpu:bg0.0417 (8s 206ms) cpu:cached0.0391 (7s 700ms) system_services0.0189 mobile_radio5.70 (4m 35s 944ms) mobile_radio:bg1.30 mobile_radio:cached4.40 wifi0.564 (16s 754ms) wifi:bg0.00648 wifi:cached0.557 wakelock0.605 (12m 31s 372ms) ) UID u0a194: 5.84 fg: 0.00676 bg: 1.13 cached: 4.22 ( cpu0.0820 (54s 773ms) cpu:bg0.0257 (5s 62ms) cpu:cached0.0563 (11s 77ms) system_services0.236 mobile_radio4.27 (3m 26s 746ms) mobile_radio:bg1.08 mobile_radio:cached3.19 wifi1.00 (29s 329ms) wifi:fg0.00676 wifi:bg0.0224 wifi:cached0.973 wakelock0.250 (5m 10s 307ms) ) UID 1020: 5.81 fg: 5.78 ( cpu0.0353 wifi5.78 (2m 51s 496ms) wifi:fg5.78 ) UID u0a183: 5.42 bg: 0.0102 cached: 5.38 ( cpu0.0558 (42s 774ms) cpu:bg0.00111 (219ms) cpu:cached0.0547 (10s 757ms) system_services0.0290 mobile_radio5.29 (4m 16s 420ms) mobile_radio:bg0.00913 mobile_radio:cached5.29 wifi0.0364 (1s 70ms) wifi:cached0.0364 wakelock0.00722 (8s 961ms) ) UID u0a132: 4.15 bg: 3.29 ( cpu1.90 (9m 14s 312ms) cpu:bg1.90 (6m 13s 1ms) system_services0.853 mobile_radio1.39 (1m 7s 288ms) mobile_radio:bg1.39 wakelock0.0161 (19s 938ms) ) UID u0a110: 3.24 fg: 0.975 ( cpu0.975 (9m 23s 216ms) cpu:fg0.975 (3m 11s 829ms) system_services2.26 ) UID 1066: 2.27 ( cpu2.27 (27m 51s 351ms) ) UID 1010: 1.93 fg: 1.09 ( cpu0.835 wifi1.09 (31s 859ms) wifi:fg1.09 ) UID 1036: 1.80 ( cpu1.80 (22m 56s 256ms) ) UID 2000: 1.47 cached: 0.189 ( cpu1.47 (17m 21s 428ms) cpu:cached0.189 (37s 170ms) ) UID u0a187: 1.40 bg: 0.00865 cached: 1.34 ( cpu0.0624 (29s 722ms) cpu:bg0.00805 (1s 584ms) cpu:cached0.0544 (10s 701ms) system_services0.0344 mobile_radio1.23 (59s 380ms) mobile_radio:bg0.000599 mobile_radio:cached1.23 wifi0.0644 (1s 895ms) wifi:cached0.0644 wakelock0.0143 (17s 795ms) ) UID u0a109: 1.21 fg: 0.00152 cached: 0.00629 ( screen1.18 (32s 368ms) cpu0.00860 (6s 166ms) cpu:fg0.00152 (299ms) cpu:cached0.00629 (1s 238ms) audio0 (2s 574ms) system_services0.0201 sensors0.0000133 (4s 356ms) ) UID u0a96: 0.949 bg: 0.947 ( cpu0.313 (3m 4s 662ms) cpu:bg0.313 (1m 1s 490ms) system_services0.00258 mobile_radio0.634 (30s 711ms) mobile_radio:bg0.634 ) UID u0a197: 0.863 bg: 0.119 cached: 0.670 ( cpu0.00815 (13s 370ms) cpu:bg0.00214 (421ms) cpu:cached0.00601 (1s 182ms) system_services0.0111 mobile_radio0.781 (37s 814ms) mobile_radio:bg0.116 mobile_radio:cached0.664 wakelock0.0633 (1m 18s 534ms) ) UID u0a170: 0.646 bg: 0.0849 cached: 0.493 ( cpu0.0122 (18s 693ms) cpu:bg0.00315 (620ms) cpu:cached0.00898 (1s 767ms) system_services0.00484 mobile_radio0.556 (26s 944ms) mobile_radio:bg0.0818 mobile_radio:cached0.475 wifi0.00988 (291ms) wifi:cached0.00988 wakelock0.0629 (1m 18s 125ms) ) UID u0a126: 0.620 fg: 0.424 ( cpu0.424 (1m 22s 226ms) cpu:fg0.424 (1m 23s 397ms) system_services0.196 ) UID 1051: 0.608 fg: 0.608 ( wifi0.608 (17s 304ms) wifi:fg0.608 ) UID u0a121: 0.393 fg: 0.390 ( cpu0.390 (4m 41s 881ms) cpu:fg0.390 (1m 16s 808ms) video0 (4s 373ms) system_services0.00286 ) UID u0a193: 0.390 fg: 0.0000433 bg: 0.198 cached: 0.102 ( cpu0.0243 (24s 575ms) cpu:bg0.0122 (2s 407ms) cpu:cached0.0120 (2s 363ms) system_services0.00462 mobile_radio0.276 (13s 360ms) mobile_radio:bg0.186 mobile_radio:cached0.0901 wifi0.0000433 (1ms) wifi:fg0.0000433 wakelock0.0850 (1m 45s 556ms) ) UID u0a178: 0.385 fg: 0.00155 bg: 0.0000511 cached: 0.366 ( cpu0.0122 (9s 651ms) cpu:bg0.0000305 (6ms) cpu:cached0.0122 (2s 402ms) system_services0.0169 mobile_radio0.341 (16s 537ms) mobile_radio:bg0.0000206 mobile_radio:cached0.341 wifi0.0144 (427ms) wifi:fg0.00155 wifi:cached0.0128 wakelock0.000326 (405ms) ) UID u0a181: 0.336 bg: 0.175 cached: 0.101 ( cpu0.00185 (12s 927ms) cpu:bg0.00131 (258ms) cpu:cached0.000534 (105ms) system_services0.000158 mobile_radio0.274 (13s 288ms) mobile_radio:bg0.174 mobile_radio:cached0.100 wakelock0.0599 (1m 14s 343ms) ) UID u0a148: 0.331 fg: 0.00207 bg: 0.0178 cached: 0.164 ( cpu0.00167 (16s 948ms) cpu:bg0.000600 (118ms) cpu:cached0.000778 (153ms) system_services0.00201 mobile_radio0.180 (8s 713ms) mobile_radio:bg0.0172 mobile_radio:cached0.163 wifi0.00274 (81ms) wifi:fg0.00207 wifi:cached0.000672 wakelock0.145 (2m 59s 745ms) ) UID u0a169: 0.293 bg: 0.00236 fgs: 0.0202 cached: 0.186 ( cpu0.0447 (28s 757ms) cpu:bg0.00236 (465ms) cpu:fgs0.0141 (2s 766ms) cpu:cached0.0283 (5s 567ms) system_services0.0841 mobile_radio0.156 (7s 556ms) mobile_radio:fgs0.000826 mobile_radio:cached0.155 wifi0.00773 (215ms) wifi:fgs0.00535 wifi:cached0.00238 wakelock0.000169 (210ms) ) UID u0a189: 0.282 bg: 0.0405 cached: 0.00661 ( cpu0.0223 (14s 127ms) cpu:bg0.0123 (2s 412ms) cpu:cached0.00661 (1s 300ms) system_services0.000474 mobile_radio0.0283 (1s 370ms) mobile_radio:bg0.0283 sensors0.174 (15h 47m 17s 887ms) wakelock0.0572 (1m 10s 988ms) ) UID 1001: 0.224 fg: 0.217 ( cpu0.217 (1m 49s 457ms) cpu:fg0.217 (42s 785ms) wakelock0.00646 (8s 21ms) ) UID u0a191: 0.191 cached: 0.0149 ( cpu0.0000559 cpu:cached0.0000559 (11ms) mobile_radio0.0148 (718ms) mobile_radio:cached0.0148 sensors0.176 (15h 58m 57s 254ms) ) UID u0a179: 0.176 cached: 0.0000661 ( cpu0.0000661 (23ms) cpu:cached0.0000661 (13ms) sensors0.176 (15h 58m 57s 254ms) ) UID u0a177: 0.174 ( cpu0.0000763 sensors0.174 (15h 47m 14s 707ms) ) UID u0a125: 0.167 fg: 0.00918 ( cpu0.00918 (6s 186ms) cpu:fg0.00918 (1s 806ms) system_services0.158 ) UID u0a122: 0.147 fgs: 0.0282 ( cpu0.0282 (10s 762ms) cpu:fgs0.0282 (5s 542ms) system_services0.119 ) UID u0a106: 0.140 fg: 0.0454 ( cpu0.0454 (14s 60ms) cpu:fg0.0454 (8s 922ms) system_services0.0950 ) UID 1041: 0.115 ( cpu0.115 (1m 26s 422ms) wakelock0.000283 (351ms) ) UID u0a171: 0.105 cached: 0.0901 ( cpu0.0166 (8s 470ms) cpu:cached0.0166 (3s 273ms) system_services0.0151 mobile_radio0.0735 (3s 559ms) mobile_radio:cached0.0735 ) UID 1021: 0.0926 ( cpu0.0926 (1m 11s 21ms) ) UID u0a108: 0.0738 bg: 0.0120 ( cpu0.0120 (5s 592ms) cpu:bg0.0120 (2s 360ms) system_services0.0617 wakelock0.0000733 (91ms) ) UID u0a155: 0.0738 fg: 0.000178 bg: 0.000122 cached: 0.00176 ( cpu0.00229 (2s 172ms) cpu:fg0.000178 (35ms) cpu:bg0.000122 (24ms) cpu:cached0.00176 (347ms) system_services0.0713 wakelock0.000208 (258ms) ) UID u0a88: 0.0442 cached: 0.000366 ( screen0.0419 (1s 149ms) cpu0.000366 (352ms) cpu:cached0.000366 (72ms) system_services0.00201 sensors0.00000082 (269ms) ) UID 9999: 0.0339 ( cpu0.0339 (9s 211ms) ) UID u0a173: 0.0265 bg: 0.0000153 cached: 0.0115 ( cpu0.0115 (3s 744ms) cpu:bg0.0000153 (3ms) cpu:cached0.0115 (2s 255ms) system_services0.0149 wakelock0.0000773 (96ms) ) UID u0a62: 0.0229 fg: 0.00180 ( cpu0.00180 (1s 710ms) cpu:fg0.00180 (354ms) system_services0.0211 ) UID u0a172: 0.0181 bg: 0.0000763 cached: 0.00365 ( cpu0.0155 (7s 777ms) cpu:bg0.0000763 (15ms) cpu:cached0.00365 (718ms) system_services0.00218 wakelock0.000503 (625ms) ) UID u0a120: 0.0170 fg: 0.00102 ( cpu0.00102 (889ms) cpu:fg0.00102 (200ms) system_services0.0160 ) UID u0a192: 0.0128 bg: 0.0000153 cached: 0.00694 ( cpu0.00695 (5s 459ms) cpu:bg0.0000153 (3ms) cpu:cached0.00694 (1s 365ms) system_services0.00569 wakelock0.000138 (171ms) ) UID u0a31: 0.0127 bg: 0.000127 fgs: 0.0000763 cached: 0.00131 ( cpu0.00211 (1s 447ms) cpu:bg0.000127 (25ms) cpu:fgs0.0000763 (15ms) cpu:cached0.00131 (257ms) system_services0.0106 ) UID u0a138: 0.00621 fg: 0.00446 ( cpu0.00382 (1s 349ms) cpu:fg0.00382 (751ms) system_services0.00176 wifi0.000639 (19ms) wifi:fg0.000639 ) UID u0a162: 0.00572 fg: 0.00287 ( cpu0.00287 (1s 262ms) cpu:fg0.00287 (564ms) system_services0.00286 ) UID 1047: 0.00560 ( cpu0.00560 (1s 278ms) ) UID u0a119: 0.00548 cached: 0.000173 ( cpu0.000173 (589ms) cpu:cached0.000173 (34ms) system_services0.00530 ) UID u0a180: 0.00547 bg: 0.0000102 ( cpu0.00150 (1s 811ms) cpu:bg0.0000102 (2ms) system_services0.00397 ) UID u0a158: 0.00499 cached: 0.000946 ( cpu0.000946 (739ms) cpu:cached0.000946 (186ms) system_services0.00392 wakelock0.000123 (153ms) ) UID u0a156: 0.00439 fgs: 0.000849 ( cpu0.000849 (595ms) cpu:fgs0.000849 (167ms) system_services0.00354 ) UID u0a35: 0.00380 cached: 0.000244 ( cpu0.000244 (258ms) cpu:cached0.000244 (48ms) system_services0.00337 wakelock0.000184 (229ms) ) UID 1013: 0.00373 ( cpu0.00373 (2s 922ms) ) UID 1069: 0.00280 ( cpu0.00280 ) UID 1046: 0.00250 ( cpu0.00250 (1s 586ms) ) UID u0a81: 0.00249 bg: 0.000193 ( cpu0.000193 (192ms) cpu:bg0.000193 (38ms) system_services0.00230 ) UID u0a168: 0.00220 cached: 0.000173 ( cpu0.000300 (380ms) cpu:cached0.000173 (34ms) system_services0.00190 ) UID u0a101: 0.00187 cached: 0.000391 ( cpu0.000391 (144ms) cpu:cached0.000391 (77ms) system_services0.00148 ) UID u0a92: 0.00181 fgs: 0.000468 ( cpu0.000468 (415ms) cpu:fgs0.000468 (92ms) system_services0.00134 ) UID u0a196: 0.00171 cached: 0.000549 ( cpu0.000549 (337ms) cpu:cached0.000549 (108ms) system_services0.00116 ) UID u0a186: 0.00106 cached: 0.000468 ( cpu0.000468 (363ms) cpu:cached0.000468 (92ms) system_services0.000592 ) UID u0a59: 0.000917 cached: 0.0000712 ( cpu0.000147 (186ms) cpu:cached0.0000712 (14ms) system_services0.000770 ) UID 1067: 0.000829 ( cpu0.000829 ) UID 1040: 0.000763 ( cpu0.000763 ) UID u0a71: 0.000685 cached: 0.0000559 ( cpu0.000132 (144ms) cpu:cached0.0000559 (11ms) system_services0.000553 ) UID u0a131: 0.000645 cached: 0.0000305 ( cpu0.000132 (97ms) cpu:cached0.0000305 (6ms) system_services0.000513 ) UID u0a123: 0.000475 fg: 0.0000407 ( cpu0.0000407 (42ms) cpu:fg0.0000407 (8ms) system_services0.000434 ) UID u0a64: 0.000470 fg: 0.0000356 ( cpu0.0000356 (37ms) cpu:fg0.0000356 (7ms) system_services0.000434 ) UID 1092: 0.000381 ( cpu0.000381 (212ms) ) UID u0a98: 0.000372 fg: 0.0000559 ( cpu0.0000559 (48ms) cpu:fg0.0000559 (11ms) system_services0.000316 ) UID u0a135: 0.000356 fg: 0.0000407 ( cpu0.0000407 (29ms) cpu:fg0.0000407 (8ms) system_services0.000316 ) UID u0a141: 0.000351 fg: 0.0000356 ( cpu0.0000356 (37ms) cpu:fg0.0000356 (7ms) system_services0.000316 ) UID u0a112: 0.000346 fg: 0.0000305 ( cpu0.0000305 (29ms) cpu:fg0.0000305 (6ms) system_services0.000316 ) UID u0i26: 0.000316 ( system_services0.000316 ) UID u0a182: 0.000280 cached: 0.000280 ( cpu0.000280 cpu:cached0.000280 (55ms) ) UID u0i25: 0.000276 ( system_services0.000276 ) UID 1082: 0.000193 ( cpu0.000193 ) UID u0a25: 0.000158 cached: 0.0000203 ( cpu0.0000203 (15ms) cpu:cached0.0000203 (4ms) system_services0.000138 ) UID 1017: 0.000107 ( cpu0.000107 (69ms) ) UID 1027: 0.0000966 fg: 0.0000966 ( cpu0.0000966 (106ms) cpu:fg0.0000966 (19ms) ) UID u0a175: 0.0000813 cached: 0.0000813 ( cpu0.0000813 (12ms) cpu:cached0.0000813 (16ms) ) UID 1019: 0.0000763 ( cpu0.0000763 (15ms) ) UID 1072: 0.0000559 ( cpu0.0000559 (9ms) ) UID u0a54: 0.0000508 cached: 0.0000356 ( cpu0.0000508 cpu:cached0.0000356 (7ms) ) UID 1053: 0.0000407 ( cpu0.0000407 (20ms) ) UID u0a73: 0.0000305 ( cpu0.0000305 ) UID u0a79: 0.0000305 cached: 0.0000305 ( cpu0.0000305 cpu:cached0.0000305 (6ms) ) UID 1068: 0.0000254 fg: 0.0000254 ( cpu0.0000254 (34ms) cpu:fg0.0000254 (5ms) ) UID 2903: 0.0000254 ( cpu0.0000254 (25ms) ) UID u0a195: 0.0000254 cached: 0.0000254 ( cpu0.0000254 cpu:cached0.0000254 (5ms) ) UID u0a163: 0.0000203 cached: 0.00000508 ( cpu0.0000203 cpu:cached0.00000508 (1ms) ) UID u0i17: 0.0000197 ( system_services0.0000197 ) UID u0i23: 0.0000197 ( system_services0.0000197 ) UID u0a58: 0.0000153 cached: 0.0000153 ( cpu0.0000153 cpu:cached0.0000153 (3ms) ) UID u0a124: 0.0000153 ( cpu0.0000153 ) UID u0a36: 0.0000102 ( cpu0.0000102 ) UID u0a27: 0.00000508 cached: 0.00000508 ( cpu0.00000508 cpu:cached0.00000508 (1ms) ) UID u0a70: 0.00000508 ( cpu0.00000508 )3、案例分析3.1 应用持锁导致无法息屏如上截图前面5个小时屏幕一直常亮无法息屏从Userspace wakelock和Foreground process可以看出DECT应用持锁持续五个小时导致无法正常息屏3.2 应用任务导致耗电模块持续运行如上截图可以看出45小时一直在通话过程中后续GPS频繁启动和扫描让设备退出深度睡眠模式后确定和这两个应用有关系。3.3 WIFI信号不好导致功耗高如上截图wifi信号poor表示信号相当不好会增加wifi模块的耗电量3.4 无法深度睡眠导致功耗高如上截图Doze一直为黄色即浅度休眠导致后台应用频繁被唤起后了解到此项目关闭了深度睡眠。3.5 三方应用导致一夜待机耗电量增高正常机器异常机器差异点为cpu running持续运行原因是radio持续活跃最后通过Estimated power use来看客户应用异常活跃导致3.6 底电流持续高达40ma底电流可通过第二章进行测试开启飞行模式即可测试底电流底电流通常反馈系统运行最低电流即器件功耗因此通常有经验认为底电流异常通常为器件导致当然这个结论其实根本不严谨。如上底电流测试的时候发现cpu/kernel频繁被激活CPU根本没有进入低功耗模式最后和BSP同事沟通拔出LCD器件恢复正常后跟踪日志断定器件BSP代码异常导致二、电流测试电流测试通常分为底电流测试和待机电流测试以及其他各种场景的电流。底电流表示了当前系统的最低电流开机飞行模式静止十分钟让其进入深度睡眠之后的电流。待机电流通常为息屏待机但是可能插入SIM卡可能有其他后台进程。各种场景根据测试的定义例如持续放视频的电流、wifi电流等这里介绍几个仪器来进行电流相关的测试。这些仪器需要代替电源因此需要把手机/设备的电池替换成一个假电池如果这个假电池有电会影响测试的准确性。1.Agilent程控电源步骤一加载bin文件步骤二圈选当前电流图当前电流图表示测试时长5分钟平均电流为11.717mA在结合具体场景对应为XXX电流。Agilent的一大缺点就是无法去精确的计算某一时间段的平均电流。2.Power monitor步骤一连接假电池到 Powermonitor假电池尽量不要使用大电容【注假电池需要带 NTC 电阻否则可能不能正常开机】步骤二打开Powermonitor软件设置电源恒定电压即对手机的供电电压一般调节范围为3.8V~4.2V点击Set Vout弹出调节对话框可手动设置输出电压手机一般设置3.8V 、4.0V测试步骤三调整参数之后可以对手机通电开始数据采集。当手机开机后点击PowerTool界面右下方的RUN按钮就已经开始对手机的耗电数据进行记录和曲线图显示步骤四查看电流图Power monitor方便的就是可以任意圈中时间段自动计算平均电流