设置AlarmManager的最佳时刻/位置

Nan*_*nne 6 service android alarmmanager

我的应用程序显示了也有通知系统的站点的内容.我想显示是否有新的通知,我正在使用一个AlarmManager调用IntentService.

我的问题是:我应该在哪里开始/注册这个AlarmManager?我把它放在onCreate()我的活动中只是为了概念验证(它的工作正常,非常感谢:)),但是如果你要开始两次这样的活动,你会得到多个警报.

我提出的唯一可能的解决方案就是这个,但我不知道这是否是最好的做法

  • onCreate()如果首选项"alarm started"为false ,则启动管理器
  • 设置一些在首选项中启动的变量.

现在,如果由于某种原因警报停止,则无法重新启动它.所以,变化将是:

  • 始终在中取消取消 onCreate()
  • 然后始终设置警报.

这似乎是一种常见的模式:希望定期获取带有警报的信息,而不是将警报设置为一次.我该怎么做?何时,何地以及如何注册警报?

另外,继续@Zelimir的评论:你能检查一下是否已经设置了某个警报?

理想情况下,无论当前是否启动活动,都会设置警报,但这可能是另一回事.

为了完整性,这是我目前用于启动警报的代码:

AlarmManager alMan   = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent i             = new Intent(this, CommentService.class);
PendingIntent penInt = PendingIntent.getService(this, 0, i, 0);

alMan.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                          SystemClock.elapsedRealtime(), 
                          AlarmManager.INTERVAL_FIFTEEN_MINUTES, 
                          penInt);
Run Code Online (Sandbox Code Playgroud)

为了更完整,应用程序描述/情况.
该应用程序基本上是从某个页面显示博客(如果你愿意的话).它有添加条目,查看条目,添加评论等的活动.在"母亲"网站上有一个接收通知的选项(例如,当您收到消息时,您在此处看到的号码也是如此).我想显示是否有新消息,因此每隔xx分钟检索一次.它现在会显示在通知栏中,但它可能会在以后提供某种小部件.

如果您需要更多信息:该应用程序名为Androblip,它支持名为blipfoto.com的网站

Com*_*are 4

何时、何地以及如何登记警报?

这是不可能抽象地回答的。这完全取决于您的应用程序的业务规则,您拒绝在问题中提供这些规则。

如果监控始终发生,典型的模式是注册警报:

  • onCreate()首次运行应用程序时的主要活动
  • 在 a 中BOOT_COMPLETED BroadcastReceiver,处理重新启动,这会擦除AlarmManager名册

你能检查一下某个闹钟是否已经设置了吗?

不可以,但您可以毫无问题地取消它。只需创建一个等效项PendingIntentcancel()调用AlarmManager.