AlarmManager - 任务队列(PendingIntent 队列)
AlarmManager - tasks queue (PendingIntent queue)
我正在使用 AlarmManager
为我的小部件应用安排一些定期更新。我是这样安排的:
context.getSystemService<AlarmManager>()!!
.setInexactRepeating(
AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime() + refreshInterval.intervalMillis,
refreshInterval.intervalMillis,
pendingIntent
)
我的待定意向如下所示:
PendingIntent.getBroadcast(
context,
RQ_CODE_BASE + id,
getStartIntent(context, appWidgetId),
PendingIntent.FLAG_UPDATE_CURRENT
)
如您所见,我正在使用非唤醒、不精确的重复闹钟。 phone 清醒时一切似乎都正常,所有计划都在 AlarmManager
触发警报后立即执行。
令intervalMillis
等于60k(1分钟)。然后,当 phone 处于睡眠状态 10 分钟 时,将其恢复为 'life' 后,我发现我的 PendingIntent
不会只触发一次,它正在一个接一个地执行 PendingIntent
操作 10 次,就像排队一样。我认为使用 PendingIntent.FLAG_UPDATE_CURRENT
标志会导致先前未决的警报操作被取消,并且在 phone 唤醒后将安排新的警报操作,但不幸的是它不是那样工作的。
有什么方法可以实现期望的行为吗?我找不到任何 AlarmMananger
方法可以让我查找特定未决意图的任务队列。
我将不胜感激help/suggestions。
这是使用重复闹钟的缺点之一。我不会为此使用重复警报。如果您希望闹钟每 X 分钟响一次,那么从现在开始安排 X 分钟闹钟一次。当该警报触发时,随心所欲,然后安排一个从现在起 X 分钟后响起的警报。
单个警报更可预测,它们不会 "queue",如果需要,您可以使用精确警报。
我正在使用 AlarmManager
为我的小部件应用安排一些定期更新。我是这样安排的:
context.getSystemService<AlarmManager>()!!
.setInexactRepeating(
AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime() + refreshInterval.intervalMillis,
refreshInterval.intervalMillis,
pendingIntent
)
我的待定意向如下所示:
PendingIntent.getBroadcast(
context,
RQ_CODE_BASE + id,
getStartIntent(context, appWidgetId),
PendingIntent.FLAG_UPDATE_CURRENT
)
如您所见,我正在使用非唤醒、不精确的重复闹钟。 phone 清醒时一切似乎都正常,所有计划都在 AlarmManager
触发警报后立即执行。
令intervalMillis
等于60k(1分钟)。然后,当 phone 处于睡眠状态 10 分钟 时,将其恢复为 'life' 后,我发现我的 PendingIntent
不会只触发一次,它正在一个接一个地执行 PendingIntent
操作 10 次,就像排队一样。我认为使用 PendingIntent.FLAG_UPDATE_CURRENT
标志会导致先前未决的警报操作被取消,并且在 phone 唤醒后将安排新的警报操作,但不幸的是它不是那样工作的。
有什么方法可以实现期望的行为吗?我找不到任何 AlarmMananger
方法可以让我查找特定未决意图的任务队列。
我将不胜感激help/suggestions。
这是使用重复闹钟的缺点之一。我不会为此使用重复警报。如果您希望闹钟每 X 分钟响一次,那么从现在开始安排 X 分钟闹钟一次。当该警报触发时,随心所欲,然后安排一个从现在起 X 分钟后响起的警报。
单个警报更可预测,它们不会 "queue",如果需要,您可以使用精确警报。