6

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

我的问题是:如果我的应用程序设置了一个重复的 AlarmManager,即使在启动的应用程序关闭并从内存中删除后,这种情况是否仍然存在?

如果没有,我如何在启动时由Android启动的较低级别启动AlarmManager,如果它失败或死亡或抛出异常,则无需用户执行任何操作即可重新启动?

最后,如果我希望 BroadcastReceiver 执行的操作没有可视化组件,我还需要为它创建一个单独的 Activity 吗?就我而言,我希望有一个后台上传器唤醒并查看文件夹,如果它看到该文件夹​​中的文件,则将它们发送到服务器。我不需要任何反馈给用户。

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

TIA

4

2 回答 2

11

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

如果我正确理解了您的问题,我认为您可以通过创建一个带有监听 android.intent.action.BOOT_COMPLETED 意图的广播接收器的项目,然后(重新)注册一个重复的警报来实现您的目标,这反过来又开始(意图)服务进行上传。

您不需要活动,但无论如何您可能都需要一个活动,让用户通过选中复选框或其他方式暂时禁用上传机制。让用户选择您的警报频率可能也很好,即应该多久启动一次服务并查找要上传的新文件。这也是第一次注册闹钟的好地方。

于 2011-02-21T23:59:01.310 回答
1

我同意 Nicolai 的观点,即您的应用程序中有 2 个广播接收器:

  • 在启动时重新注册警报的一种
  • 一种在警报触发时启动您的服务

您仍然可以有一个活动,但它不应该由警报接收器启动(因此服务):相反,可能会在您启动服务时启动通知,用户可以从扩展消息启动活动通知。

也许还可以考虑使用 setInexactRepeating(而不是 setRepeating)作为警报,以及使用工作线程来处理长上传(以防用户希望同时在主线程中使用您的活动)。

于 2011-02-22T00:10:24.993 回答