Usługa Android ulega awarii po przesunięciu aplikacji z listy ostatnich aplikacji

Mam usługę uruchamianą (nie związaną) przez działanie. Jeśli działanie zostanie zniszczone (np. Przez naciśnięcie przycisku Wstecz), usługa będzie nadal działać, oczywiście jest to zamierzone. Jeśli jednak przesunę aktywność z listy „ostatnich aplikacji”, usługa zostanie natychmiast uruchomiona ponownie. Jest to powtarzalne, za każdym razem, gdy aktywność / aplikacja jest przesuwana z listy, pojawia się nowe wywołanie metody onCreate usługi. Brak połączenia do onDestroy pomiędzy!

Najpierw myślałem, że usługa zostanie zabita przez androida, chociaż nie widziałem powodu do zabicia (ani aktywność, ani usługa nie zajmują się rzeczami, w rzeczywistości są minimalistyczne i nic nie robią). Ale potem zauważyłem, że usługa faktycznie się zawiesza.

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

Kod nie jest godny uwagi, ale tutaj jest

Czynność:

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");
    }

    //[...]
}

Usługa:

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");
    }

}

Krótko mówiąc: moja usługa jest niezależna od cyklu życia działania, ale tylko tak długo, jak nie przeskakuję aplikacji z listy ostatnich aplikacji. W takim przypadku usługa zostanie ponownie uruchomiona, ale bez wywołania onDestroy.

Za każdym razem to się dzieje, nie tylko stan usługi, ale także praca wykonywana przez tę usługę jest tracona. Chcę tylko wiedzieć, dlaczego przyczyną tego jest machnięcie.

questionAnswers(3)

yourAnswerToTheQuestion