我的问题是当IM按下主页按钮并关闭我的应用程序当时后台服务停止并且之后它需要再次在应用程序中重新启动后台服务将启动所以我怎么能像Whatssapp如果应用程序将关闭或琐事然后服务也可以在后台运行.....
答案 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种方式:
启动您的问题的快速解决方案(如果我的猜测是正确的)将切换服务以在" startService"模式。如果你不想玩你的代码,最好的地方就是服务的onBind()方法(只是尝试从自己开始服务)。当然,这不会启动服务,但会将其模式切换到长期运行的真实背景模式。 这不会解决你上面提到的所有问题 - 服务仍然可以被系统杀死以获得更多资源。你可以在某些方面阻止它:如果你真的想让服务保持运行,你应该考虑使用前台服务(谷歌它),这将增加服务生存的机会。但最好的选择就是使用服务生命周期,在需要时保存数据并在服务启动时加载它们,就像您应该使用活动一样。对于长时间运行的后台服务,还有选项start sticky,这将导致服务在每次kill,crash等之后启动。