澄清Android中的AlarmManager行为

时间:2011-02-21 23:25:05

标签: android alarmmanager

我看到所有AlarmManager的例子都是由Activity设置的。

我的问题是: 如果我的应用程序设置了一个循环的AlarmManager,那么即使在启动的应用程序关闭并从内存中删除后,它是否仍然存在?

如果没有,我如何在启动时由Android启动的较低级别启动AlarmManager,如果它失败或死亡或重新启动异常,而用户不必做任何事情?

最后,如果我希望BroadcastReceiver进行的操作没有可视组件,我还是要为它创建一个单独的Activity吗?在我的情况下,我希望有一个后台上传器唤醒并查看一个文件夹,如果它看到该文件夹​​中的文件,将它们发送到服务器。我不需要向用户提供任何反馈。

所以,我的理想是拥有一个神奇的,基于操作系统的AlarmManager,它调用一个只处理上传的IntentService,但我不清楚如何让这个AlarmManager首先运行。

TIA

2 个答案:

答案 0 :(得分:11)

是的,AFAIK警报“存活”并继续被触发,即使在注册它们的活动结束后也是如此。但他们无法在重启手机后继续存在。

如果我理解你的问题,我认为你可以通过创建一个广播接收器来监听android.intent.action.BOOT_COMPLETED意图,然后(重新)注册重复警报,从而实现你所寻找的目标。轮流启动(意图)服务进行上传。

您不需要活动,但无论如何您可能想要一个活动,让用户通过勾选复选框等临时禁用上传机制。让用户选择闹钟的频率,即启动服务的频率并查找要上传的新文件,这可能也会很不错。这也是第一次注册闹钟的好地方。

答案 1 :(得分:1)

我同意Nicolai的说法,你的应用程序中有2个广播接收器:

  • 在启动时重新注册闹钟的一个
  • 由警报触发时启动服务的

您仍然可以进行活动,但不应该由闹钟接收器启动(因此服务):相反,可能会在您启动服务时启动通知,用户可以从该服务启动活动扩展了通知的消息。

也许还要为你的闹钟考虑setInexactRepeating(而不是setRepeating),以及使用工作线程来处理长上传(如果用户想要同时在主线程中使用你的活动)。 / p>