【发布时间】:2019-07-25 23:11:55
【问题描述】:
我正在使用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 方法可以让我查找特定待处理意图的任务队列。
如有任何帮助/建议,我将不胜感激。
【问题讨论】:
标签: android alarmmanager android-pendingintent