警报管理器 - 任务队列(待处理意图队列)



我正在使用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
)

如您所见,我正在使用非唤醒,不精确的重复警报。当手机处于唤醒状态时,一切似乎都正常,并且在触发警报后立即执行AlarmManager所有计划。

intervalMillis等于 60k(1 分钟)。然后,当手机处于睡眠状态10 分钟后,在将其恢复"生命"后,我看到它不是只触发我的PendingIntent一次,而是像排队一样一个接一个地执行PendingIntent操作10次。我以为使用PendingIntent.FLAG_UPDATE_CURRENT标志会导致以前的待处理警报操作被取消,并且在电话唤醒后将安排新的警报操作,但不幸的是它不是那样工作的。

有什么方法可以完成期望的行为吗?我找不到任何AlarmMananger方法,这些方法可以让我查找特定待处理意图的任务队列。

我将不胜感激任何形式的帮助/建议。

这是使用重复警报的缺点之一。我不会为此使用重复警报。如果您希望闹钟每 X 分钟响一次,那么从现在起将单个闹钟安排在 X 分钟。当该警报触发时,执行任何您想要的操作,然后安排一个从现在起 X 分钟后响起的警报。

单个警报更可预测,它们不会"排队",如有必要,您可以使用精确的警报。

最新更新