我正在使用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 分钟后响起的警报。
单个警报更可预测,它们不会"排队",如有必要,您可以使用精确的警报。