アクティビティによって開始される (バインドされない) サービスがあります。アクティビティが破棄された場合 (たとえば、戻るボタンを押すことによって)、サービスは引き続き実行されます。これはもちろん意図されたものです。ただし、「最近のアプリ」リストからアクティビティをスワイプすると、サービスがすぐに再起動されます。これは再現可能です。アクティビティ/アプリがリストからスワイプされるたびに、サービスの onCreate メソッドが新たに呼び出されます。間に onDestroy を呼び出す必要はありません。
最初に、サービスがAndroidによって強制終了されると思いましたが、強制終了の理由がわかりませんでした(アクティビティもサービスもリソースを消費することはありません。実際、それらは最小限で何もしません)。しかし、その後、サービスが実際にクラッシュすることに気付きました。
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
コードは注目に値するものではありませんが、ここにあります
アクティビティ:
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");
    }
    //[...]
}
サービス:
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");
    }
}
要するに、私のサービスはアクティビティのライフサイクルから独立していますが、最近のアプリのリストからアプリをスワイプしない限りのみです。その場合、サービスは再開されますが、onDestroy は呼び出されません。
これが発生するたびに、サービスの状態だけでなく、サービスが行っている作業も失われます。スワイプがこれの理由である理由を知りたいだけです。