【问题标题】:What happens when I start an alarm twice?当我两次启动闹钟时会发生什么?
【发布时间】:2011-04-18 19:10:26
【问题描述】:

我正在跳槽(当然,这并不复杂)以避免两次启动警报。基本代码如下:

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 的行为发生变化,以后可能会给我带来麻烦。

【问题讨论】:

    标签: android alarmmanager


    【解决方案1】:

    由于 AlarmManager 的取消方法可以使用“类似”的 Intent 来取消警报,因此我们可以说平台可以识别给定类名的 Intent。因此,重复调用它应该不是问题,因为平台会知道对于这种待处理的意图,警报已经存在。

    这里有一个post,讲了类似的话。

    【讨论】:

    • 嗯,谢谢!我从那个问题中看到 Pendingintent 确实是一样的(正如文档所说)。但是用相同的PendingIntent 调用setInexactRepeating 两次也是......不重复吗?
    • 我找不到任何参考资料,但目前至少启动相同PendingIntent 的警报不会使其触发多次。我想我会先检查一下我是否已经设置好了。这样容易多了。谢谢
    • 是否也有可能多次拨打setInexactRepeating时,闹钟会被重置?就像如果间隔是 15 分钟并且已经过去了 7 分钟,那么第二次调用会将间隔时间重置为 0 吗?
    猜你喜欢
    • 1970-01-01
    • 2014-08-20
    • 2010-10-12
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    相关资源
    最近更新 更多