私はバインドされたサービスを持っています。アクティビティはそれをバインドしています。Service on Activity のonStop()メソッドのバインドを解除します。
問題は、ランタイムの変更 (向きの変更など) がアクティビティに発生した場合、アクティビティが再作成されることです。したがって、onStop()メソッドはアクティビティから呼び出され、アクティビティはそのメソッドでサービスのバインドを解除します。その結果、サービスが破棄されます (そして再起動されます)。
アクティビティが非表示のときにサービスを停止させたまま、実行時の変更でサービスが破棄されないようにしたい。あなたはそれを試してみると言うことができますがstartService()、アクティビティが見えないときにサービスが停止しないようにします。stopService アクティビティの を追加するonStop()と、結果は および と同じにbindService()なりunbindService()ます。
アクティビティのPostDelayingunbindService()はonStop()この問題を部分的に解決できますが、遅延時間は任意になり、アクティビティがしばらくの間 GC を取得できなくなります。もっと明確な解決策が欲しい。
android:configChanges="orientation"他のランタイムの変更もあり、ランタイムの変更を処理するための推奨されない方法であるため、このようなソリューションは必要ありません。
要するに、 Service が を呼び出した Fragment のように動作するようにしたいのですsetRetainInstance(true)。ただし、フラグメントにはbindService(). 私は何をすべきか?