问题 当我两次发出警报时会发生什么?


为了避免两次发出警报,我正在跳槽(好吧,并不是那么复杂)。基本代码如下:

AlarmManager mgr=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent i=new Intent(this, MyService.class);
PendingIntent pi=PendingIntent.getService(this, 0, i, 0);
mgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, pi);

每次我的应用程序启动时,我是否真的会运行此代码是否重要?我称之为大约10次作为过度杀伤实验,我没有看到任何不良影响,但我找不到任何关于这是否是巧合或预期行为的参考。

如果不是特别期待的话,感觉“错了”。如果行为发生,它可能会让我后来遇到麻烦 AlarmManager 变化。


9854
2018-04-18 19:10


起源



答案:


由于AlarmManager的取消方法很好,具有“类似”意图来取消警报,我们可以说平台识别给定类名的意图。因此,重复调用此应该不是问题,因为平台将知道对于这样的未决意图已经存在警报。

这里有一个 岗位 谈论类似的事情。


13
2018-04-18 19:34



嗯,谢谢!我从那个问题看到了 Pendingintent 确实是一样的(正如文档所说)。但会打电话 setInexactRepeating 与此相同 PendingIntent 两次也是......不重复? - Nanne
我找不到任何参考,但目前至少开始报警 PendingIntent 不会让它触发一次以上。我想我会先检查一下我是否已经设定好了。这样容易多了。谢谢 - Nanne
是否有可能在通话时 setInexactRepeating 多次,闹钟定时器会被重置?如果间隔是15分钟并且已经过了7分钟,那么第二次呼叫会将间隔时间重置为0吗? - aandis


答案:


由于AlarmManager的取消方法很好,具有“类似”意图来取消警报,我们可以说平台识别给定类名的意图。因此,重复调用此应该不是问题,因为平台将知道对于这样的未决意图已经存在警报。

这里有一个 岗位 谈论类似的事情。


13
2018-04-18 19:34



嗯,谢谢!我从那个问题看到了 Pendingintent 确实是一样的(正如文档所说)。但会打电话 setInexactRepeating 与此相同 PendingIntent 两次也是......不重复? - Nanne
我找不到任何参考,但目前至少开始报警 PendingIntent 不会让它触发一次以上。我想我会先检查一下我是否已经设定好了。这样容易多了。谢谢 - Nanne
是否有可能在通话时 setInexactRepeating 多次,闹钟定时器会被重置?如果间隔是15分钟并且已经过了7分钟,那么第二次呼叫会将间隔时间重置为0吗? - aandis