【问题标题】: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);
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多