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.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage