何时在Android(onDestroy)中关闭AlarmManager

何时在Android(onDestroy)中关闭AlarmManager,android,background,alarmmanager,ondestroy,Android,Background,Alarmmanager,Ondestroy,我使用AlarmManager.setRepeating方法每隔30秒开始广播一次。后来,我用接收器捕捉到它,并执行一些操作。整个过程也应该在后台运行,并且应该在用户交互或应用程序关闭(销毁)时停止工作 我试图在onDestroy方法中放入停止AlarmManager的代码,但偶尔会调用此事件。这是一个正确的方法来阻止它,还是有更方便的方法 我读了文件,上面说: 在销毁活动之前执行任何最终清理。。。 但后来它说: 在某些情况下,系统只会在不调用此方法的情况下终止活动的宿主进程 另一个问题是,即使

我使用AlarmManager.setRepeating方法每隔30秒开始广播一次。后来,我用接收器捕捉到它,并执行一些操作。整个过程也应该在后台运行,并且应该在用户交互或应用程序关闭(销毁)时停止工作

我试图在onDestroy方法中放入停止AlarmManager的代码,但偶尔会调用此事件。这是一个正确的方法来阻止它,还是有更方便的方法

我读了文件,上面说: 在销毁活动之前执行任何最终清理。。。 但后来它说: 在某些情况下,系统只会在不调用此方法的情况下终止活动的宿主进程


另一个问题是,即使调用onDestroy,它也没有完全执行。我在里面放了几个Log.d,我只能看到其中一个。

首先,您必须将它放在创建方法之前

public static AlarmManager am;
public static PendingIntent sender;
ondestory
方法中,您可以放置:

am.cancel(sender);

要取消AlarmManager。

您必须创建一个
PendingEvent
的全局对象,在您想要停止的地方,只需通过与
PendingEvent
对象相同的引用调用其cancel方法。

如果系统必须在紧急情况下恢复内存,那么onStop()和onDestroy()可能不会被调用,onPause()是保证在终止进程之前调用的最后一个方法。因此,应该使用onPause()将关键的持久数据(如用户编辑)写入存储器


onPause()将是在内存不足的情况下调用的最后一个方法。但是,如果用户试图通过设置->应用->应用名称->强制停止应用程序,那么即使是onPause也不会被调用。

您只有一个活动吗?谢谢您的回答。这正是我在代码中所做的。问题是onDestroy偶尔会被调用,有时即使被调用,AlarmManager也不会停止。我放置Log.d,然后取消,然后再次放置Log.d。我只能看到第一条Log.d消息。欢迎并请将我的答案作为正确答案并对我的答案进行评分。我不想使用onPause,因为每当我按下home按钮时,onPause都会发生。我希望这也能在后台运行。我向用户提供了一个停止它的功能,但如果他忘记了,我希望以编程的方式进行。