当应用程序被强制关闭时,AlarmManager不起作用。

11
AlarmManager的文档说明如下:

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

然而,一旦我的应用程序关闭(从任务管理器强制关闭),我的闹钟就无法工作,并且广播接收器内的OnReceive方法永远不会被调用。我正在针对4.x版本进行开发。
发生了什么事?

请展示一下您如何设置闹钟,以及在清单文件中为接收闹钟的接收器添加条目。 - Pork 'n' Bunny
4
当应用程序发生强制关闭时,与该应用程序相关联的所有对象都会被清除,因此闹钟管理器也会被清除。文档中提供了应用程序处于“正常”状态时的信息,即应用程序未被强制关闭。即使应用程序没有运行,闹钟管理器也可以工作。 - Shrikant Ballal
@Shrikant,“应用程序未运行”和“应用程序强制关闭”的区别是什么? - berserk
1个回答

14

Shrikant所说的基本上就是答案。

更详细的解释是,如果用户手动强制关闭应用程序,则Android会假定该应用程序存在问题。因此,与该应用程序相关的所有活动(BroadcastReceiver、警报等)都不会被启动,直到用户至少手动运行一次该应用程序。例如,如果设备处于该状态下,将不会调用应用程序的引导BroadcastReceiver,直到用户运行应用程序,然后下一个设备引导事件将传递到应用程序的BroadcastReceiver。

Android框架开发人员确认了这种行为设计:https://groups.google.com/forum/?fromgroups=#!topic/android-developers/anUoem0qrxU

*为语法进行编辑,并添加示例行为。


1
好的,这对我来说很奇怪。也许用户杀掉了一个闹钟,因为他们想释放资源,但他们仍然希望明天早上闹钟响起?这是如何工作的? - shoke
@clu,用户并没有杀死闹钟。如果用户杀死了一个行为不当的应用程序或该应用程序因其自身的不当行为而崩溃,Android会停止与该应用程序相关的所有内容,以保护用户免受应用程序的(进一步)伤害。从系统闹钟中删除该应用程序是该过程的一部分。 - Kai
2
@kai:当应用程序崩溃时,闹钟管理器会被杀死吗?如果是这样,我们应该在应用程序类中设置闹钟,还是有更好的方法可以采取? - Basher51
@Basher51 很好的问题。我们应该在应用程序类上重新安排所有的闹钟吗? - motis10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接