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

时间:2011-05-29 19:22:17

标签: android service alarm

我有一个应用程序,其中包含一个调用许多活动的工作流程,其中一些活动已完成,另一些活动在用户进行活动时将其保持活动状态。但是我无法关闭我的闹钟服务,即使启动主页按钮并且应用程序被杀死也会继续。

哦,确定 - 设置中的力关闭会很好地停止警报服务(这是杀死它的唯一方法)。我无法停止来自我的应用程序的警报,因为没有告诉我应用程序何时关闭。

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

3 个答案:

答案 0 :(得分:0)

  

但我无法关闭我的闹钟服务,即使启动主页按钮并且应用程序被杀,该服务仍会继续。

然后不要注册闹钟。 AlarmManager旨在在代码尚未运行时定期执行代码。对于纯粹属于某项活动的内容,请使用postDelayed()

答案 1 :(得分:0)

当您按下主页按钮时,您的应用程序不会 - 并且不应该 - 关闭。通过调用onSaveInstanceState(Bundle)来“冻结”它。如果你单击你的应用程序图标,它将重新启动并恢复,就好像系统时钟中有一个巨大的暂停(或者,如果它被系统杀死,从你在{{中设置的包中重新创建) 1}})。通常情况下,您会在onSaveInstanceState中暂停或取消与时间相关的活动,因为从某种意义上说,此时您的应用停止了时间。

当应用程序退出时,您需要停止使用哪些警报?我想,它们的全部意义在于,即使它没有运行,也会在特定时间调用你的应用程序。

答案 2 :(得分:0)

就这样做....

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);

退出应用程序时,这将停止服务添加警报。一切顺利。