【问题标题】:How to stop an alarm service when the app stops?应用停止时如何停止警报服务?
【发布时间】:2013-11-15 18:07:08
【问题描述】:
我有一个应用程序,它的工作流程调用了许多活动,其中一些活动完成了,而另一些活动则在用户进行操作时保持活动状态。但是我无法关闭我的闹钟服务,即使按下主页按钮并且应用程序被终止,该服务也会继续。
哦,当然-设置中的强制关闭将很好地停止警报服务(这是杀死它的唯一方法)。我无法从我的应用程序中停止警报,因为没有任何信息告诉我应用程序何时关闭。
生命周期方法 onDestroy() 或 on Stop() 都不起作用,因为主页按钮可以在 15 个活动期间启动,并且在任何活动之后很长时间都不会调用 onDestroy()。
【问题讨论】:
标签:
android
service
alarm
【解决方案1】:
但我无法关闭闹钟服务,即使按下主页按钮并且应用程序被终止,该服务仍会继续。
然后不要注册警报。 AlarmManager 旨在在您的代码尚未运行时定期执行您的代码。对于纯粹在活动中的内容,请使用postDelayed()。
【解决方案2】:
当您按下主页按钮时,您的应用不会(也不应该)关闭。调用onSaveInstanceState(Bundle) 将其“冻结”。如果您单击您的应用程序图标,它将重新启动并恢复,就像系统时钟有一个巨大的暂停一样(或者,如果它被系统杀死,则从您在 @987654322 中设置的包重新创建@)。通常,您会在 onPause 中暂停或取消与时间相关的活动,因为从某种意义上说,您的应用程序的时间会在此时停止。
当应用程序退出时,您需要停止哪些警报?我认为,它们的全部意义在于在特定时间调用您的应用程序中的某些内容,即使它没有运行。
【解决方案3】:
就这样吧……
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);
当您退出应用程序时,这将停止您的服务添加警报。一切顺利。