Der Android-Dienst stürzt ab, nachdem die App aus der Liste der zuletzt verwendeten Apps entfernt wurde
Ich habe einen Dienst, der durch eine Aktivität gestartet (nicht gebunden) wird. Wenn die Aktivität zerstört wird (z. B. durch Drücken der Zurück-Taste), läuft der Dienst weiter, dies ist natürlich beabsichtigt. Wenn ich jedoch die Aktivität aus der Liste der zuletzt verwendeten Apps streife, wird der Dienst sofort neu gestartet. Dies ist reproduzierbar. Jedes Mal, wenn die Aktivität / App aus der Liste entfernt wird, wird die onCreate-Methode des Dienstes neu aufgerufen. Kein Anruf zu onDestroy zwischendurch!
Zuerst dachte ich, dass der Dienst von Android getötet wird, obwohl ich keinen Grund für das Töten sah (weder die Aktivität noch der Dienst verbrauchen Ressourcen, tatsächlich sind sie minimalistisch und tun nichts). Aber dann habe ich gemerkt, dass der Dienst tatsächlich abstürzt.
V/MainActivity(856): onDestroy // swipe out of the list
I/ActivityManager(287): Killing 856:com.example.myapp/u0a10050: remove task
W/ActivityManager(287): Scheduling restart of crashed service com.example.myapp/.TestService in 5000ms
Der Code ist nicht bemerkenswert, aber hier ist es
Aktivität:
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.v(TAG, "onCreate, starting service...");
startService(new Intent(this, TestService.class));
}
@Override
protected void onStart() {
super.onStart();
Log.v(TAG, "onStart");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.v(TAG, "onDestroy");
}
//[...]
}
Bedienung:
public class TestService extends Service {
private static final String TAG = "Service";
// onBind omitted
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.v(TAG, "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
Log.v(TAG, "onDestroy");
}
}
Kurz gesagt: Mein Dienst ist unabhängig vom Lebenszyklus der Aktivität, jedoch nur, solange ich die App der Liste der zuletzt verwendeten Apps nicht streife. In diesem Fall wird der Dienst neu gestartet, jedoch ohne einen Aufruf von onDestroy.
In jedem Fall geht nicht nur der Status des Dienstes, sondern auch die Arbeit des Dienstes verloren. Ich möchte nur wissen, warum der Schlag der Grund dafür ist.