1

私は、サービスへのServiceConnectionを保持するアクティビティを持っています。方向が変わると、ServiceConnectionが失われて再作成されたように見えます。オリエンテーションの変更によるAndroidのServiceConnectionの維持

これは望ましくありません。 ServiceConnectionがアクティビティのレクリエーションを通じて維持されるようにしたいと思います。私はこの問題を解決する良いパターンを探しています。

答えて

1

Activity.onRetainNonConfigurationInstance()メソッドと関連するgetLastNonConfigurationInstance()メソッドを見てください。

+0

私はそれらを使用していますが、私はそれを通して私を導くためのパターンを探しています。これらの特別なケースのすべての考慮事項のために、私のアプリを維持するのが難しくなる複雑さがたくさんあります。 –

+0

OKですが、あなたの質問は「Orientation Changesを通じてServiceConnectionを維持しています。」ですが、質問タイトルや質問自体には「複雑さが非常に高い」や「特別なケースについて考慮していません。コードがどのように動作するかの例を示していないので、その質問に答えるのは難しいです。 – Squonk

-2

マニフェストのアクティビティプロパティで、android:configChanges = "orientation"を使用します。

+0

この方法はお勧めしません。http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange –

1

残念ながら、onRetainNonConfigurationInstance/getLastNonConfigurationInstanceを使用すると、リークが発生する可能性があります。

private ServiceConnection mConnection = new ServiceConnection() { 
    public void onServiceConnected(ComponentName className, IBinder service) { 
     mServiceMessenger = new Messenger(service); 
     mConnectedToService = true; 
    } 

    public void onServiceDisconnected(ComponentName className) { 
     mConnectedToService = false; 
     mServiceMessenger = null; 
    } 
}; 

mServiceMessengerは私が送信することができますメッセンジャーのインスタンスである:私の場合(私は、リモートサーバー上のファイルをアップロードするIntentServiceを使用)で は、私のような考えられて活動における私の接続を宣言しました。アップロードタスクのキャンセル注文。

しかし、私はonRetainNonConfigurationInstanceとgetLastNonConfigurationInstanceを使用してソリューションをテストしたときに、EclipseのMATプラグインのおかげで、画面の回転に自分のアクティビティコンテキストのリークが多く発生することがわかりました。

IntentServiceへの接続(およびアクティビティとの通信)を処理するために必要なすべての要素をグループ化したシングルトングループを作成しました(アプリケーションの複雑さにより、この問題を解決できました)。したがって、画面を回転させると、作成された新しいアクティビティがシングルトンによって管理される接続を戻し、情報を失うことなく使用することができます。

関連する問題