Android 如何阅读;adb外壳转储系统报警“;输出
我正在努力正确设置警报,并理解取消和重新安排警报的机制 我发现,有一个adb命令可以检索设备上计划的所有报警,但我还没有找到解释输出格式的文档 我明白,我在这里要求很多解释,所以如果有人能提供一个链接,详细解释“adb shell dumpsys alarm”,我将不胜感激 因此,以下是问题:Android 如何阅读;adb外壳转储系统报警“;输出,android,adb,alarmmanager,Android,Adb,Alarmmanager,我正在努力正确设置警报,并理解取消和重新安排警报的机制 我发现,有一个adb命令可以检索设备上计划的所有报警,但我还没有找到解释输出格式的文档 我明白,我在这里要求很多解释,所以如果有人能提供一个链接,详细解释“adb shell dumpsys alarm”,我将不胜感激 因此,以下是问题: 待处理报警批次:23 a。“23”是当前活动的、计划的报警吗 批处理{4293d3a8 num=1 start=1369361 end=1407261}: RTC#0:Alarm{4293d358 t
RTC#0:Alarm{4293d358 type 1 com.android.chrome}
类型=1 WheneReleased=1369361 when=+19s304ms window=-1 repeatInterval=0计数=0
操作=PendingEvent{429e4500:PendingEventRecord{429dbbc8 com.android.chrome broadcastIntent} a。什么是“num=1”、“start=1369361”和“end=1407261”
b、 "我想,RTC’代表RTC报警
C“0”代表什么
D什么是“类型=1”
E“when=+19s304ms”是否表示报警将在19秒内触发
F什么是“窗口=-1”
G“repeatInterval=0”是否表示这是非重复报警
H“count=0”是否意味着由于手机处于睡眠状态,此警报没有延迟
i、 "operation=PendingIntent{…}代表挂起的意图,我认为它将由报警触发
act=com.username.receivers.CyclicWeatherUpdater.WEATHER\u UPDATE\u ACTION
cmp={com.username.weatherinfo/com.username.receivers.CyclicWeatherUpdater} a。“+47s271ms”是否表示此警报将在47秒内触发
B什么是“0唤醒”-从未触发警报
C什么是“两个警报”
D“com.username.weatherinfo”代表的是上下文字段中给定给挂起意图的包的名称吗
E“行为”是指为意图而发送的行为吗
F什么是“cmp”?我明白了,它是由包名和类名组成的——但是它们是从哪里来的呢?来自意图构造器? G为什么部分报警只有“act”或“cmp”?我假设,没有“cmp”字段的报警用于隐式广播意图。然而,为什么会有没有“act”字段的警报
我意识到这条线索很古老,但答案不容易找到,而且可能有用。我花了很长时间研究这些信息的含义 问题1:批次 警报被组织成批次: 从API 19开始,传递给此方法的触发时间被视为不精确:在此时间之前不会发出警报,但可能会延迟并在一段时间后发出。操作系统将使用此策略,以便在整个系统中一起“批处理”报警,从而最大限度地减少设备需要“唤醒”的次数,并最大限度地减少电池的使用。一般来说,只要警报安排在遥远的将来,在不久的将来安排的警报不会延迟 每个批次可能有多个警报。在这种情况下,有23批报警,这意味着计划的报警可能远远超过23个。在
dumpsys报警输出中,描述每个批次的行如下所示:
Batch{4293d3a8 num=1 start=1369361 end=1407261}:
其中:
4293d3a8
是与批次关联的内部id
num=1
是此批次中的报警数。在这种情况下,批次中只有一个警报
start
和end
数字表示自系统上次重新启动以来经过的毫秒数,也大致表示应触发批次中报警的时间窗口
问题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}}
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}
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
...
其中:
- 第一部分是
RTC_WAKEUP
、RTC
、appeated_WAKEUP
或appeated
中的一部分,表示报警的类型,分别对应于整数值0-3
#0
是批次内的报警编号,其中编号从0到n-1
,其中n
是批次中的报警编号。如果您的报警与其他报警一起批处理,则“未来最远时间”when=“定义批处理中所有报警的触发时间
4293d358
是与报警关联的内部id号
com.android.chrome
是设置报警的类的包名
type=1
,报警类型,见上面的第一个项目符号
WheneReleased=1369361
指自系统启动后触发此警报的毫秒数(大约)
when=+19s304ms
表示从调用dumpsys alarm
时起,报警将在19秒内触发,即304毫秒。类似地,类似于+2d13h29m03s882ms
的值表示2天13小时29分钟的相对时间。。。将来
window=
指的是两个内部常量之一,它们与报警的批处理方法有关AlarmManager.WINDOW_EXACT=0
并在使用setExact()
或setAlarmClock()
计划报警时设置<代码>AlarmManager.WINDOW\u启发式=-1
并在使用setInexactRepeating()
计划报警时设置。否则,该值由API版本决定。对于API<19(KitKat),使用WINDOW\u-EXACT
,对于API>=19,使用WINDOW\u-HEURISTIC
i
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
...