すべてのアクティビティに共通の動作を実装するベース アクティビティ クラスがあります。それらはすべて、この BaseActivity を拡張します。
BaseActivity の onStart メソッドでサービスにバインドし、onStop メソッドで条件付きでバインドを解除しています。条件付きとは、ユーザーが選択したオプションに応じて、アプリがバックグラウンドになったときにサービスをバックグラウンドで実行し続ける必要があるかどうかを意味します。
問題は、サービスが実行されるべきではないときに実行し続けることがあることです (これは、サービスを強制終了するオプションが有効になっていて、unbindService() が効果的に呼び出されている場合です)。
アクティビティが変更されるたびに、サービスのバインドが解除され、再びバインドされると考えています。バインドされたサービスは参照カウントされるため、私のサービスはバインドされていない回数よりも多くバインドされている可能性があります。
さらに、ドキュメントにはそれについて次のように書かれています。
通常、クライアントのライフサイクルの立ち上げと破棄の瞬間に一致するときに、バインドとバインド解除をペアにする必要があります。例えば:
アクティビティが表示されている間だけサービスと対話する必要がある場合は、onStart() 中にバインドし、onStop() 中にバインド解除する必要があります。
アクティビティがバックグラウンドで停止している間でも応答を受信したい場合は、onCreate() 中にバインドし、onDestroy() 中にバインド解除できます。これは、アクティビティがサービスを実行している間 (バックグラウンドであっても) サービスを使用する必要があることを意味することに注意してください。そのため、サービスが別のプロセスにある場合は、プロセスの重みを増やすと、システムが停止する可能性が高くなります。それを殺します。
私は両方のオプションを実装しようとしているので、これを実装するための最良のアプローチは何ですか?