如何在应用程序停止时停止警报服务?

问题描述:

我有一个应用程序,它有一个调用许多活动的工作流程,其中一些完成,其他一些则在用户前进时让他们保持活动状态。但是我无法关闭我的闹钟服务,即使当主页按钮被启动并且应用程序被杀时,该服务也会继续。如何在应用程序停止时停止警报服务?

确定 - 设置中的强制关闭会非常好地停止报警服务(它是唯一杀死它的方法)。我无法阻止我的应用程序发出警报,因为应用程序关闭时没有任何提示。

没有一个生命周期方法onDestroy()或Stop()可以工作,因为可以在15个活动中的任何一个活动中启动home按钮,并且onDestroy()在任何活动之后都不会长时间调用。

但是我不能关闭我的报警服务,即使主页按钮被激活并且应用程序被杀死,我的报警服务也会继续。

然后不要注册报警。当代码尚未运行时,AlarmManager被设计为定期执行您的代码。对于纯粹属于某个活动的内容,请使用postDelayed()

+0

但是,postDelayed()将不会工作,如果电话睡觉,对吧? – 2012-07-13 18:20:15

+0

@DavidB .:正确。 – CommonsWare 2012-07-13 23:58:51

当您按回家按钮时,您的应用程序不是 - 并且不应该 - 关闭。它通过致电onSaveInstanceState(Bundle)“冻结”。如果你点击你的应用程序图标,它将被重新启动并恢复,就好像系统时钟有一个巨大的暂停(或者,如果它被系统中止,从你在onSaveInstanceState中设置的包中重新创建) 。通常,您会在中打开暂停或取消与时间相关的活动,因为从某种意义上说,您的应用在该时间点停止。

你在使用什么警报,因为他们需要停止时,应用程序退出?我认为,他们的重点是在特定时间调用应用程序中的某些内容,即使它没有运行。

只要做到这样....

AlarmManager alarm; 
PendingIntent pintent; 

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.SECOND, 10);    
Intent intent = new Intent(this, TestService.class);   
pintent = PendingIntent.getService(this, 0, intent, 0); 
alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
int i; 
i=30; 
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), i* 1000, pintent); 
System.out.println("service going to start-----------"); 
startService(new Intent(getBaseContext(), TestService.class)); // Here start your service 

如果你要停止你的服务意味着你应该立即停止你的报警服务。在onBackPressed()方法的确定按钮将完成您的活动。在该按钮中,您应该添加以下代码。

 alarm.cancel(pintent); 

这会停止您的服务当您退出应用程序时添加警报。祝一切顺利。