Android AlarmManager会在很长一段时间后停止触发

时间:2012-04-26 17:25:19

标签: android persistence alarmmanager alarm intervals

应该声明和初始化AlarmManagers的正确上下文是什么,以便它们无限期地持续存在(或直到系统重新启动或直到任务杀手将其彻底清除掉)并避免垃圾收集 - 但也允许更改在整个申请范围内发出警报。

我使用AlarmManager的全部原因是为了解决始终运行服务的需要。然而,为了完成这一壮举,AlarmManager在哪里创建?我认为它不能在一个服务中创建,然后关闭/销毁,因为警报对象最终会消失,警报会停止发射 - 不是吗?

我喜欢来自不同问题帖子的AlarmManager示例的概念,其中MyAlarm类被创建为用于警报onReceive的BroadcastReceiver的扩展,并且AlarmManager在此类的构造函数中初始化。但是,如果跨多个上下文需要MyAlarm实例,此实现如何工作。例如,来自跨多个Activity对象的事件处理程序。来自多个Widgets的事件处理程序。来自工人服务。所有这些都可能必须禁用或启用警报。我的猜测是,在需要处理警报的地方创建一个本地实例,因为pendingIntent对于所有实例都是相同的,所以实际上你将使用虚拟“单例”。

这只是概念性的,因为我不知道如何测试警报管理器的“垃圾收集”,这可能会发生8,12,?几个小时后,我的警报随机停止射击。我的目标是,如果手机未重新启动,并且我的任务未被用户手动杀死,则可以无限期地停止警报。感谢

2 个答案:

答案 0 :(得分:0)

在android中,操作系统会自动关闭它认为没有使用的服务......许多应用程序和特别是小部件都在努力解决这个问题。我不知道是否有确定的方法来确保服务不会自行关闭。您可以通过偶尔执行某些操作来延长持续时间,以便系统认为这不是一项无用的任务。

是的,您将对所有这些使用相同的待定意图,因此您可以运行一个与多个处理程序链接的服务,这是操作系统设置方式的一部分。您可以在单个服务开始时使用您的签名更新所有小部件,该服务还可以从您的小部件接收所有处理程序。

答案 1 :(得分:0)

  

然而,为了完成这一壮举,AlarmManager在哪里创建?

AlarmManager是系统服务。它由操作系统“创建”。

  

我认为它不能在服务中创建,然后关闭/销毁,因为警报对象最终会消失,警报会停止发射 - 不是吗?

AlarmManager是系统服务。 “警报”由操作系统保存。

  

我的猜测是,在需要处理警报的地方创建一个本地实例,因为pendingIntent对于所有实例都是相同的,所以实际上你将使用虚拟的“singleton”。

正确。