Android 应用程序强制关闭时AlarmManager不工作

Android 应用程序强制关闭时AlarmManager不工作,android,broadcastreceiver,alarmmanager,android-broadcast,Android,Broadcastreceiver,Alarmmanager,Android Broadcast,AlarmManager的文档启动 注意:Alarm Manager适用于希望在特定时间运行应用程序代码的情况,即使应用程序当前未运行。对于正常的计时操作(滴答声、超时等),使用处理程序更容易、更高效 但是,一旦我的应用程序关闭(从任务管理器强制关闭),我的警报将不起作用,广播接收器内永远不会调用OnReceive方法。 我的目标是4.x 发生了什么事?@Shrikant说的几乎就是答案 更长的verison是,Android假设如果用户必须手动强制关闭应用程序,应用程序会出现问题。因此,在用户

AlarmManager的文档启动

注意:Alarm Manager适用于希望在特定时间运行应用程序代码的情况,即使应用程序当前未运行。对于正常的计时操作(滴答声、超时等),使用处理程序更容易、更高效

但是,一旦我的应用程序关闭(从任务管理器强制关闭),我的警报将不起作用,广播接收器内永远不会调用
OnReceive
方法。 我的目标是4.x


发生了什么事?

@Shrikant说的几乎就是答案

更长的verison是,Android假设如果用户必须手动强制关闭应用程序,应用程序会出现问题。因此,在用户手动运行应用程序至少一次之前,不会启动与应用程序相关的所有活动(广播接收器、警报等)。例如,当设备在此状态下关闭和打开时,将不会调用应用程序的引导广播接收器,直到用户运行应用程序,然后下一个设备引导事件将传递给应用程序的广播接收器

Android框架开发人员的设计证实了这种行为:


*为语法编辑并添加了示例行为

请向我们展示您如何设置报警,以及清单中报警接收者的条目。当发生强制关闭时,与该应用程序相关的所有对象都将被清除,因此报警管理器也将被清除。当应用程序处于“正常”状态,即未强制关闭时,文档中有相关信息。即使应用程序未运行,报警管理器也可以工作。@Shrikant“应用程序未运行”和“应用程序强制关闭”之间有什么区别?好的,这对我来说很奇怪。也许用户杀死闹钟是因为他们想释放资源,但他们仍然希望闹钟在第二天早上响?这是如何工作的?@clu no用户不会杀死闹钟,如果用户杀死了一个行为不端的应用程序或该应用程序因其自身的行为不端而崩溃,Android将停止与该应用程序相关的一切,以保护用户免受该应用程序(进一步)的伤害。从系统alarmclock中删除应用程序是该过程的一部分。@kai:当应用程序崩溃时,是否会杀死报警管理器?如果是这样,我们应该在应用程序类中设置警报,还是在这种情况下最好的方法是什么?@Basher51问得好。我们应该重新选择应用程序类上的所有报警吗?