当活动被杀或停止或强制关闭时后台服务停止

时间:2014-03-17 19:34:38

标签: android chat background-service

我的问题是当IM按下主页按钮并关闭我的应用程序当时后台服务停止并且之后它需要再次在应用程序中重新启动后台服务将启动所以我怎么能像Whatssapp如果应用程序将关闭或琐事然后服务也可以在后台运行.....

3 个答案:

答案 0 :(得分:4)

我遇到了同样的问题。将应用程序从应用程序托盘中滑出时,后台服务的进程将被终止。

您可以在服务中添加以下代码,或参阅this问题

@Override
public void onTaskRemoved(Intent rootIntent){
   Intent restartServiceIntent = new Intent(getApplicationContext(), this.getClass());
   restartServiceIntent.setPackage(getPackageName());

   PendingIntent restartServicePendingIntent =  PendingIntent.getService(getApplicationContext(), 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT);
   AlarmManager alarmService = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
   alarmService.set(
      AlarmManager.ELAPSED_REALTIME,
      SystemClock.elapsedRealtime() + 1000,
      restartServicePendingIntent);

   super.onTaskRemoved(rootIntent);
}

此代码的作用是,当您的活动被杀死时,它会在应用程序被杀死时重新启动应用程序。

答案 1 :(得分:2)

非常简单,只需按照下面的方案链接即可。

Continue Service even if application is cleared from Recent app

您的服务和流程(在您的服务中运行的线程)将保持连续。

答案 2 :(得分:0)

好的,我只是猜测 - 真的不想检查你的应用程序的所有代码。

服务可以通过 2种方式

启动
  1. 使用bindService()你可能在这里做什么。它很好,但意味着服务将在最后一个客户端取消绑定后立即处理(您可能在某些onPause()方法中执行此操作。
  2. 使用startService()命令。在这种情况下,只要你停止服务就会运行服务,或者系统会认为这个服务正用于大量内存,应该用于一些更紧急的任务(例如:一些胖活动)
  3. 您的问题的快速解决方案(如果我的猜测是正确的)将切换服务以在" startService"模式。如果你不想玩你的代码,最好的地方就是服务的onBind()方法(只是尝试从自己开始服务)。当然,这不会启动服务,但会将其模式切换到长期运行的真实背景模式。 这不会解决你上面提到的所有问题 - 服务仍然可以被系统杀死以获得更多资源。你可以在某些方面阻止它:如果你真的想让服务保持运行,你应该考虑使用前台服务(谷歌它),这将增加服务生存的机会。但最好的选择就是使用服务生命周期,在需要时保存数据并在服务启动时加载它们,就像您应该使用活动一样。对于长时间运行的后台服务,还有选项start sticky,这将导致服务在每次kill,crash等之后启动。