2012-05-16 5 views
7

は、私はいくつかのUI(カップルのテキストボックスとか)でFragmentを作成し、私は、サーバーを照会するAsyncTaskを実行しているイムので、setRetainInstanceを使用(要求は一度だけ送信することができます)と私が必要AsyncTaskの結果だから私の質問は: UI全体でフラグメント全体を保持するのは間違っていますか?私は人々がFragmentを使用してsetRetainInstanceを使用するカップルの例を見ましたが、その余分なものを使用していない何か間違っていますか? setRetainInstanceを使用する際に問題が発生するのはなぜですか?これに関するドキュメントの情報を見つけることができませんでした。setRetainInstanceフラグメント

答えて

-1

オリエンテーションをロックしている場合は、うまくいくはずです。そうしないと、特定のアクティビティー・インスタンスに関連付けられているウィジェットを保持すると、メモリー・リークが発生する可能性があります。

+0

ただし、フラグメントに関連付けられているウィジェットはありませんか?多分、私はフラグメントがどのように機能するのか分からなかったでしょう。 – Raykud

+1

向きがロックされていても、問題が発生する可能性があります。 Androidは設定変更のためにビューを再作成します。構成の変更は、ディスプレイの回転(通常の場合)、言語の変更、キーボードの着脱などが可能です。画面の回転を考慮しても、問題全体が解決されるわけではありません。 – sstn

2

setRetainInstance(true)を使用しても、回転するとあなたのフラグメントは表示されたままになります(onDestroyView、次にonCreateView)。 onDestroyViewを超えるビューへの参照を保持しない限り、古いアクティビティのリークはありません。最良の方法は、onDestroyViewの参照を明示的にnullにすることですが、onCreateViewのコードは一般的にこれらの参照を上書きします。

人々はデータを保持するために別個のフラグメント(ビューなし)を使用するオンライン(いくつかの公式のものを含む)の例が多数あります。上記のことが正しいと仮定すると、これは不要です(リークを防ぐため)。多くの場合、データを処理するだけの責任があり、UIについて心配することのない別個のフラグメントを使用すると、より洗練されたコード/アーキテクチャに終わることがあります。

あなたは、using Eclipse MATを回した後、アクティビティコンテキストがリークしているかどうかを確認できます。

関連する問題