dumpsys alarm 格式解读

Android ADB电池信息获取与设置:从原理到实战脚本 在Android开发与测试中,深入理解设备电源管理是进行性能优化和故障排查的基础。Android系统通过内核层的Power Supply子系统和框架层的BatteryService协同工作,为应用提供电池状态数据。ADB(Android调试桥)作为核心调试工具,能够通过命令行与这些系统服务交互,实现电池信息的深度获取。这项技术对于功耗分析、自动化测试和系统监控具有重要价值,尤其在需要精确控制测试环境(如模拟低电量告警)或进行长时间耗电追踪的场景中。本文聚焦于通过adb shell dumpsys batte 阅读详情

    最近在搞应用唤醒排序,一致疑惑dumpsys alarm后的一些东西到底是什么意思?通过几番查阅资料,总结如下:

    在安卓adb root进如命令行后(没有root或者root群组的权限执行不了该命令),会吐出一串东西,大家可自行测试。一直不明白,这些格式是什么意思,今天搜索一下,stackvoerflow中找到了一个比较牛的答案,原文地址:

     http://stackoverflow.com/questions/28742884/answer/submit
    
    这里只做简单的翻译,和加一些个人的理解

1.  
<span style="font-size:18px;">Pending alarm batches: 48</span>

当应用设置ALARM的时候,系统不会将这些ALARM在设置的准确时间内触发,而将用一种批量触发(batches mode)的策略,这样可以最小化地使系统从休眠状态醒来,最低程度地减少电池的消耗,即将一批触发时间接近的闹钟,压缩到某一个时间段内一起触发,而不是一个个触发,这样系统会很难休眠。
上面的字段则表示,有48个ALARM将被触发,dumpsys alarm 输出后,就是现实每一个闹钟的触发详情,如:

<span style="font-size:18px;">4293d3a8: 批处理模式下的内部ID号
num = 1:表示在该batch中,只有一个闹钟
start和end后的时间,表示自系统启动后,流逝的时间,该段时间粗略的表示,该闹钟会在start和end之间的时间触发</span>

2.
    RTC #0: Alarm{4293d358 type 1 com.android.chrome} 
    type=1 whenElapsed=1369361 when=+19s304ms window=-1 repeatInterval=0 count=0
    operation=PendingIntent{429e4500: PendingIntentRecord{429dbbc8 com.android.chrome broadcastIntent}}

对于每一个alrm,都会有如上所示的三行解说

   
   RTC:表示ALARM的类型,一般有:RTC_WAKEUP, RTC, ELAPSED_WAKEUP, or ELAPSED每个类型代表的意思就不赘述了,有兴趣的         可以自己查阅资料
   #0:表示在该批量模式中,该ALARM的标号,取值0~n-1,n为该batch中alarm个数
  4293d358 :闹钟的内部编号
  com.android.chrome:设置该闹钟的应用包名
  type=1:闹钟的类型,即第一条中提到的几个闹钟类型
  whenElapsed=1369361:该闹钟会在系统开机后,大概1369361后触发,这是大概时间
  when=+19s304ms:该闹钟会在执行完这条dumpsys alarm命令后,19秒304ms后触发
  window=:根据该alarm被调度的不同方法,设置不同的值,如果该alarm是   setExact()或setAlarmClock()方法调用的,该值为           AlarmManager.WINDOW_EXACT(=0),如果是 setInexactRepeating(),则赋值为AlarmManager.WINDOW_HEURISTIC(=-           1),然而A PI的level不同该值也不同,API小于19(KITKAT)的是WINDOW_EXACT,大于19的是WINDOW_HEURISTIC
  repeatInterval=900000:改闹钟的重复频率,900000ms后重复,0表示不重复
  count=:表示该alarm因为某些原因而被忽略了的次数,0表示没有被忽略过
  operation=PendingIntent{...}:与pendingIntent相关,该intent被实例化后,可以发送广播,启动服务,或者启动Activity,                                说白了就是唤醒应用的操作。

3.
Broadcast Ref Count: 0

     为了使得系统在醒来后,发送必要的广播帧,并且保证在所有的广播帧没有发送出去之前,系统不要进入睡眠状态,内部定义了一个变量:mBroadcastRefCount ,它的初始值是0,并且当需要发送的广播在队列配对的时候,该变量的值就会递增,发送一个广播后则递减,当减到0的时候,就会释放它持有的wakelock,而让系统进入休眠状态。
     所以,Broadcast Ref Count: 0 表示在运行dumpsys alarm的时刻,该时刻并没有广播要发送。

4.
top alarms:

根据应用的唤醒系统的时间排行,取最长时间的前十名,然后按照降序列出,有助于找出第三方app因为编程不规范,而导致极度耗电

5.
Alarm Stats

    列出所有系统中应用设置alarm的情况,可以排查设置的闹钟是否起作用了
    格式如下:
    com.example.someapp +1s857ms running, 0 wakeups:
    +1s817ms 0 wakes 83 alarms: cmp={com.example.someapp/com.example.someapp.someservice}
    +40ms 0 wakes 1 alarms: cmp={com.example.someapp/com.example.someapp.someotherservice}

    com.example.someap:设置alarm的应用包名
    +1s857ms running:系统总体被该应用所有的alarm消耗的时间
    0 wakeups:设备被闹钟唤醒的次数

     接下来是每个alarm的情况:


    +1s817ms:该alarm消耗的时间
    0 wakes:设备被唤醒的次数
    83 alarms:alarm被触发的次数,重复闹钟,该值大于1
    cmp={...}:alarm被触发,则启动该服务,服务实例位置在{}中声明

    如果触发的是广播,则格式如:

     android +4m51s566ms running, 281 wakeups:
    +2m46s583ms 0 wakes 1224 alarms: act=android.intent.action.TIME_TICK
    +1m25s624ms 89 wakes 89 alarms: act=android.content.syncmanager.SYNC_ALARM
    +52s898ms 0 wakes 41 alarms: act=com.android.server.action.NETWORK_STATS_POLL
    ...

     act=...:发送广播的名称

    看完了之后,发现一切都清楚了,但是有个疑问,笔者一直没有搞清楚,那就是wakes的次数和alarm的次数到底有什么区别?是怎么区分的,如果有知道的,也希望告知一下。


2023 Android性能分析工具全解析:从Perfetto到LeakCanary的实战指南 性能分析是软件工程中确保应用从“能用”迈向“好用”的核心环节,其原理在于通过系统化的数据采集与监控,定位代码、系统及硬件层面的瓶颈。这项技术的核心价值在于将性能优化从被动救火转变为主动预防,直接提升用户体验与应用稳定性。在Android开发领域,其典型应用场景包括解决界面卡顿、优化启动速度、治理内存泄漏以及降低能耗。本文聚焦于当前Android性能分析的主流生态,深入探讨了以Perfetto和LefCanary为代表的工具链。Perfetto作为下一代系统级追踪平台,为分析复杂的卡顿与多线程问题提供了统一视 阅读详情

相关推荐

别只盯着ANR!用Battery Historian分析BugReport,揪出App耗电与异常退出的隐藏关联

本文深入解析如何利用Battery Historian工具分析Android应用的耗电与异常退出关联问题。通过BugReport数据可视化,帮助开发者定位唤醒锁滥用、后台服务异常等隐藏问题,提供从数据采集到优化策略的完整解决方案,有效提升应用性能和用户体验。

weixin_30892889的博客 374

Android知识点 363 —— dumpsys alarm

Dumpsys alarm查看应用程序唤醒命令: 在安卓adb root进如命令行后(没有root或者root群组的权限执行不了该命令), Pending alarm batches: 48 当应用设置ALARM的时候,系统不会将这些ALARM在设置的准确时间内触发,而将用一种批量触发(batches mode)的策略,这样可以最小化地使系统从休眠状态醒来,最低程度地减少电池的消耗,即将一批触发时间接近的闹钟,压缩到某一个时间段内一起触发,而不是一个个触发,这样系统会很难休眠。 上面的字段...

编程到管理、技术到产品 1645

Android 4.4.4短信中继实战:Magisk v15.4+影刀RPA自动化集成

短信中继是RPA与物理设备联动的关键能力,其本质是通过系统级权限监听并转发SMS消息。在老旧安卓设备上实现稳定中继,需深入理解Android广播机制演进、root权限获取原理及数据库监听技术路径。Android 4.4.4因保留隐式SMS_RECEIVED广播支持,成为低功耗、高兼容的工程优选;而Magisk v15.4则是该系统下唯一能稳定注入、持久化root且兼容旧内核sepolicy的版本。结合轻量Shell脚本直读mmssms.db、init.d自启动与影刀RPA Webhook对接,可构建零依赖、

weixin_33681778的博客 481

adb shell dumpsys alarm 显示所有Alarm

开发机连接Android设备,并执行以下命令后,可以显示当前Android系统中注册的全部Alarm闹钟。 // 显示Andorid系统的全部Alam adb shell dumpsys alarm 举例谷歌GMS的alarm配置: 执行以上命令后,一般会输出对应应用程序的以下信息: // 执行adb shell dumpsys alarm后,com.google.android.gms输出信息 ELAPSED_WAKEUP #1: Alarm{66b278e type 2 when 935543 fl

bjxiaxueliang的CODING小栈 5075

惊爆揭秘!异步启动永磁同步电机,调速核心技术大起底

传统的同步启动方式需要额外的同步设备,成本高且维护复杂。异步启动PMSM则巧妙地利用了鼠笼感应电机的启动原理,无需额外同步设备即可实现安全可靠的启动。其核心思想是将定子电流分解为两个正交的分量:磁链分量(id)和转矩分量(iq),分别控制这两个分量,从而实现对电机转矩的精确控制。随着电机设计技术的不断进步和控制算法的不断优化,异步启动PMSM的性能将得到进一步提升,应用范围也将更加广泛。异步启动PMSM的调速技术是其核心技术之一,直接影响着电机的性能和应用范围。

wen8789的博客 984

Flutter 直接调用so动态库,或调用C/C++源文件内函数

我把 .so 文件尝试放过好几个目录/lib/,最终都会报这个错误,现在才知道库文件需要放在你根本想象不到的地方!!!尝试了一些方法还是不行后我放弃了 ffi,想着用 Flutter 的 MethodChannel 桥接 android/ios 原生,再让原生去调 native 层。一顿操作把Android端的搞定了,当然中间涉及到 Kotlin和C++ 层的数据类型映射的痛苦,而且业务函数也不像一个 helloworld 那么简单,别提有多痛苦了。

开发以大橘为重 8352

安卓Alarm闹钟唤醒耗电问题的排查

一、故事背景 当我们的安卓APP进行厂商预装时,对方往往对APP后台耗电有严格的要求。因此、他们对Alarm唤醒频率有严格要求。 当厂商反馈我们APP的Alarm唤醒频率太高而没有给出详细信息时,我们往往只有硬着头皮去排查自己代码中Alarm的使用。 不幸的是有时Alarm唤醒频率是第三方SDK造成的,我们自己代码的Alarm并没有问题,排查自己的代码并实际作用的。 本文分享了实际项目中一...

Robin Hu的专栏 2751

吉比特-笔试

1. 题一:打雷后下雨的概率是80%,而打闪电后下雨的概率是70%,那么即打雷又打闪电后下雨的概率是多少?   答:打雷后下雨和打闪电后下雨都是独立事件,P=1-又打雷又闪电但没下雨的概率= 1 - 0.2 *0.3 = 94%        题二:打雷后下雨的概率是80%,但是没打闪电后下雨的概率是20%,那么打雷了但没打闪电后下雨的概率是多少?答:P=0.8 *0.2 / ( 0.8 *0

naturism的专栏 2496

Android后台调试开发命令

开发中我们有时候需要借助一些命令帮助更好的高效率定位解决问题,下面简单总结一些常用的Linux命令 一.基础命令 1.cat 用于查看文件内容,有时候我们想查看文件信息,用这个命令就非常方便便捷,更重要的是可以结合grep对内容进行过滤。 Linux中过滤用grep,Windows过滤用findstr lb@lbpc:~/桌面$ cat 178.txt test testasdffg 1234567 text lb@lbpc:~/桌面$ cat 178.txt |grep test test tes

Neo的博客 1670

深度学习环境搭建以及DeepLabCut安装过程

文章目录 一、查询电脑硬件 安装GeForce驱动程序 二、环境搭建与软件安装 1.安装CUDA运算平台软件 2.安装cuDNN支持包 3.配置环境变量 三、 DeepLabCut环境配置 1.安装Anaconda 2.创建容器环境 3.激活容器环境 4.安装TensorFlow 5.验证TensorFlow是否安装成功 6...

m0_51136557的博客 3159

USB 3.0 高清音视频采集芯片——MS2130

MS2130 是一款 USB 3.0 高清视频和音频采集芯片,内部集成 USB3.0 Device 控制器、数据收发模块、音视频处理模块。

YOU_SeMi的博客 7866

对应用中Alarm优化

对应用中Alarm优化查找使用Alarm的代码查找三方使用的Alarm当前结果 起因:华为应用市场反馈Alarm唤醒次数过多,需要优化。 未优化之前通过华为的DevEco进行功耗测试,在Mate 9上每小时唤醒71次,在p10上每小时唤醒62,妥妥的手机没办法进入休眠状态,而他们的标准是每个应用每小时唤醒不超过20次。 查找使用Alarm的代码 Alarm的使用需要AlarmManager,而AlarmManager的获取是通过getSystemService(ALARM_SERVICE)获取到的,找到

Huang兄 865

行政数据分析大屏实战:用Tableau从Excel到看板的完整搭建流程(含数据连接与字段计算避坑)

本文详细介绍了如何利用Tableau从Excel数据源搭建行政数据分析大屏的完整流程,涵盖数据准备、连接技巧、计算字段优化、看板设计及动态交互部署。通过五阶工作流,帮助用户高效处理多源异构数据,实现业务洞察与可视化呈现,提升行政数据分析效率。

weixin_29696711的博客 342

告别卡顿!用Battery Historian揪出Android后台耗电元凶(含adb命令大全)

本文详细介绍了如何使用谷歌官方工具Battery Historian进行Android功耗分析,精准定位后台异常耗电与卡顿问题。文章提供了从Docker部署、捕获bugreport日志到深度解读分析图表的完整实战指南,并附赠一套可直接复用的adb命令大全,帮助开发者高效揪出Wakelock等耗电元凶,优化应用性能与续航。

earth的博客 210

026:vue+threeJS 设置地面铺砖的效果

BoxGeometry 是 Three.js 中用于创建立方体或长方体的几何体类。它允许你指定立方体的宽度、高度、深度以及这三个方向上的分段数,从而控制立方体的细分程度。width: 立方体的宽度(沿 x 轴方向)。height: 立方体的高度(沿 y 轴方向)。depth: 立方体的深度(沿 z 轴方向)。widthSegments: 可选参数,指定立方体在 x 轴方向上的分段数,默认值为 1。heightSegments: 可选参数,指定立方体在 y 轴方向上的分段数,默认值为 1。

大剑师兰特的GIS世界 647

OpenCv —— 检测车牌号(附完整源码)

OpenCv —— 检测车牌号

5601

AI 智能眼镜 · Android 系统定制全栈知识点

应用层(Launcher / Camera App / 定制 APK)→ Framework 层(AMS / WMS / PMS / CameraService)→ Native 层(SurfaceFlinger / mediaserver / cameraserver)→ HAL 层(Camera HAL / Audio HAL / BT HAL)→ Kernel 驱动 → 硬件(SoC / Sensor / 显示屏 / 摄像头)Insets 是系统 UI(状态栏/导航栏)占用的区域;

qq_16763041的博客 332

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android的dumpsys命令

转自 https://www.jianshu.com/p/6bd4813b3c60 我们都知道Android是基于Linux的操作系统,它使用的是默认的Shell是Ash,之前的一篇文章有提到过《Shell脚本的简单介绍》,但是这个东西很明显是不能满足Android需求的,所以Google开发了很多针对Android的命令行工具。 从git上把Android的源码拉下,就会发现有一个cmds的文件...

Yoryky的专栏 1165

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android Linux Alarm 对功耗的影响

Android Linux Alarm 对功耗的影响 技术标签:alarmrtcandroidlinux 文章目录 1、 Alarm介绍 1.1 alarm的几种类型及区别 1.2 alarm相关接口 1.3 batch——减少设备唤醒次数以节省功耗 2、alarm关键流程 2.1 Alarm关键流程分析——init 2.2 Alarm关键流程分析...

qq_28852011的博客 1238

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

adb命令获取sys_android – 如何读取“adb shell dumpsys alarm”输出

我意识到这个线程是老的,但答案不容易找到,并可以使用。我花了很多时间来研究这些消息的含义。Q1:批量Pending alarm batches: 23Beginning in API 19, the trigger time passed to this method is treated as inexact: the alarm will not be delivered before thi...

weixin_34521351的博客 656

dumpsys介绍

目录 1. 概要2. 工作原理 2.1 dumpsys的代码逻辑2.2 系统服务的dump方法 3. 解析dumpsys输出 请尊重原创版权,转载注明出处。 1. 概要 dumpsys是Android提供的系统工具,可以用来查看所有系统服务的信息。 在命令行输入如下命令,就可以罗列出当前所有的系统服务名: $ adb shell dumpsys -l Curre

小邓(Java) 1202

dumpsys power 字段含义介绍

在分析app测功耗以及亮灭屏的过程中,经常会执行dumpsys power来获取PowerManagerService的状态。下面就关于dumpsys power的打印的部分字段的含义简要说明下,有不对的地方还请在评论区指出来。 POWER MANAGER (dumpsys power) Power Manager State: Settings power_manager_constants: no_cached_wake_locks=true mDirty=0x0 mWak...

长乐居士 2492

功耗问题之过多唤醒源 wakeups

和你一起终身学习,这里是程序员 Android本篇文章主要介绍Android开发中的性能部分知识点,通过阅读本篇文章,您将收获以下内容:过多的唤醒源wakeups...

程序员Android 1194

dumpsys命令

概述 可通过dumpsys命令查询系统服务的运行状态(对象的成员变量属性值),命令格式:dumpsys 服务名 dumpsys activity //查询AMS服务相关信息 dumpsys window //查询WMS服务相关信息 dumpsys cpuinfo //查询CPU情况 dumpsys meminfo //查询内存情况 系统服务 服务名 类名 功能 activity ActivityManagerService AMS相关信息 package PackageManagerS

lxy1740的博客 1017
上一篇: 安卓 SD卡写入文件后不能立即显示被写入的文件解决方法
下一篇: Android中App耗电量统计核心函数注解
memoryjs
博客等级 码龄18年 240粉丝 113原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值