3

应该声明和初始化 AlarmManager 的正确上下文是什么,以便它们无限期地持续存在(或者直到系统重新启动或直到 Task Killer 实际上将其清除)并避免垃圾收集 - 但也允许跨整个警报更改警报整个应用程序的范围。

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

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

这只是概念性的,因为我不知道如何测试可能发生在 8、12、?的警报管理器的“垃圾收集”?几个小时后,当我的闹钟随机停​​止响起时。我的目标是,如果手机没有重新启动,并且我的任务没有被用户手动杀死,那么让警报无限期地触发。谢谢

4

2 回答 2

0

然而,要完成这一壮举,AlarmManager 是在哪里创建的?

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

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

AlarmManager是一个系统服务。“警报”由操作系统保持。

我的猜测是,在您需要处理警报的任何地方创建一个本地实例,并且由于所有实例的 pendingIntent 都是相同的,因此您实际上将使用虚拟“单例”。

正确的。

于 2012-04-26T17:59:06.380 回答
0

在android中,操作系统会自动关闭它认为没有被使用的服务......许多应用程序,尤其是小部件都在为此苦苦挣扎。我不知道是否有确定的方法来确保服务不会自行关闭。您可以通过让它偶尔做一些事情来坚持更长时间,这样系统就不会认为这是一项无用的任务。

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

于 2012-04-26T17:36:20.197 回答