2011-04-17 76 views
3

我有服务,我需要运行每5分钟。我已经有了安排在设备启动时重复报警的代码。它的工作原理,但“管理”AlarmManager。如何检测我是否已经有重复闹钟运行?

  1. 安装应用程序并运行它时,我的报警不运行。需要重新启动debice。这是预料之中的。

  2. 如果我开始在活动开始时重复报警,那么我不确定是否已经从设备启动引发报警。我会得到“双打”吗?它会运行2个闹钟吗?

基本上,我想确保我就报警,如果用户重新启动设备或电池耗尽等,但我也并不wan't时安装的应用程序得到它开始他们重新启动设备。或者,例如,如果用户“强制关闭”,然后运行应用程序 - 它不会再运行此服务,但它需要。而且,我不想要双重运行。我只需要每5分钟一次。

这可以/需要做什么?

回答

5

当安装应用程序并运行它时,我的闹钟不运行。需要重新启动debice。这是预料之中的。

您不必等到重新启动。在您的应用第一次运行时安排您的初始警报。

如果我开始在活动开始时重复报警,那么我不确定是否已经从设备启动报警。我会得到“双打”吗?它会运行2个闹钟吗?

只要它是等效的PendingIntent,它应该替换现有的报警AFAIK。

+0

我会让它等价。那么,我可以在主要活动开始时启动它,那样做?活动开始多少次无关紧要?但是计时器本身会被“破坏”。如果我在1和5之后开始跑步,那么如果用户在2:00开始应用 - 服务将在2:01开始。下次用户在2:02开始应用 - 服务将从2:03开始。这不是关键细节,但我理解正确吗? – katit 2011-04-17 15:41:02

+0

@katit:我很抱歉,但我不明白你的评论。你是安排闹钟的人。当闹铃响起时,你是一个控制者。因此,你需要做任何必要的计算才能达到目的。同样,如果您在安装后第一次运行应用时建立了警报,然后再次重启,则应该处于OK状态。 – CommonsWare 2011-04-17 15:45:14

+0

我如何知道“安装后首次运行”是什么时候发生的?我能做的最好的事情就是通过Application.onCreate。而且我也可以在偏好中加入一些我不喜欢理想的偏好。 我想我不确定生命周期是如何工作的。如果我打开HOME并停止我的应用程序 - 警报将每5分钟仍然有效(但我不知道WHEN,因为它们仅在5之后重复)。用户启动应用程序,我安排了另一个将取代现有的闹钟,但我不知道下一次执行的时间。我想我可以安排在5点运行,比如00:05,00:10等。 – katit 2011-04-17 15:52:18

-1

如果您或其他人仍然遇到此问题,我可以分享我最终用来解决问题的方法。

首先,让我按照我的理解重新说明问题,因为似乎存在一些混淆:当应用程序第一次启动时,您想要做一些事情(对于您的情况,设置闹钟)。不是当应用程序的某个活动处于最前沿时。而不是只是曾经。

你在开机加载的第一个活动的onCreate方法与参数,这将极大地帮助你:

public void onCreate(Bundle savedInstanceState) {} 

第一次遇到这种活动运行,savedInstanceState将等于空。此后每次都不会为空。使用它来触发是否在应用程序引导时执行某些操作。这是我如何确定是否在启动时启动服务。

+0

这不完全正确。如果用户退出应用程序(使用后退按钮从任务中的唯一活动),然后重新进入,则即使可能未重新启动进程并且未删除警报,savedInstanceState也将为空。 – Oliv 2013-09-10 09:22:32

+0

这是不正确的 – 2013-10-25 06:04:08

相关问题