Android AlarmManager 在长时间后停止触发

标签 android persistence alarmmanager alarm intervals

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

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

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

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

最佳答案

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

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

关于Android AlarmManager 在长时间后停止触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10338369/

相关文章:

android - 如何在 Detox 测试中使用深度链接默认打开 android 应用程序

java - JPA 实体不刷新(为每个事务使用新的 EntityManger)

java - future 日期的 Android 通知

java - 定期更新我的应用程序的 UI

android - 创建覆盖 ImageView 动画谷歌地图

java - 如何覆盖android中的权限管理器

iOS 应用内购买 - 判断用户是否已购买的最佳方式

android - 即使应用程序被杀死,如何使用警报管理器打开 Activity ?

android - RxJava : Creating observable from a Nullable object

grails - Grails使用自动ID在域持久性上创建其他属性