如何在应用程序停止时停止警报服务?
我有一个应用程序,它有一个调用许多活动的工作流程,其中一些完成,其他一些则在用户前进时让他们保持活动状态。但是我无法关闭我的闹钟服务,即使当主页按钮被启动并且应用程序被杀时,该服务也会继续。如何在应用程序停止时停止警报服务?
确定 - 设置中的强制关闭会非常好地停止报警服务(它是唯一杀死它的方法)。我无法阻止我的应用程序发出警报,因为应用程序关闭时没有任何提示。
没有一个生命周期方法onDestroy()或Stop()可以工作,因为可以在15个活动中的任何一个活动中启动home按钮,并且onDestroy()在任何活动之后都不会长时间调用。
但是我不能关闭我的报警服务,即使主页按钮被激活并且应用程序被杀死,我的报警服务也会继续。
然后不要注册报警。当代码尚未运行时,AlarmManager
被设计为定期执行您的代码。对于纯粹属于某个活动的内容,请使用postDelayed()
。
当您按回家按钮时,您的应用程序不是 - 并且不应该 - 关闭。它通过致电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);
这会停止您的服务当您退出应用程序时添加警报。祝一切顺利。
但是,postDelayed()将不会工作,如果电话睡觉,对吧? – 2012-07-13 18:20:15
@DavidB .:正确。 – CommonsWare 2012-07-13 23:58:51