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",如果需要,您可以使用精确警报。