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