我有一个应用程序,其中包含一个调用许多活动的工作流程,其中一些活动已完成,另一些活动在用户进行活动时将其保持活动状态。但是我无法关闭我的闹钟服务,即使启动主页按钮并且应用程序被杀死也会继续。
哦,确定 - 设置中的力关闭会很好地停止警报服务(这是杀死它的唯一方法)。我无法停止来自我的应用程序的警报,因为没有告诉我应用程序何时关闭。
生命周期方法onDestroy()或Stop()都不起作用,因为在15个活动中的任何一个活动期间都可以启动主页按钮,并且在任何活动之后很长一段时间内不会调用onDestroy()。
答案 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);
退出应用程序时,这将停止服务添加警报。一切顺利。