まず、保持されているフラグメントに関する私の投稿を確認してください。それは役立つかもしれません。
今あなたの質問に答えるために:
フラグメントもそのビューステートを保持しますか、それとも構成の変更時にこれが再作成されますか?正確には「保持」されるものは何ですか?
はい、Fragmentの状態は構成の変更後も保持されます。具体的には、「保持」とは、構成の変更時にフラグメントが破棄されないことを意味します。つまり、構成の変更によって基になるものが破壊された場合でも、はFragment保持されます。Activity
ユーザーがアクティビティを離れると、フラグメントは破棄されますか?
sと同様に、メモリリソースが少ない場合Activity、Fragmentsはシステムによって破棄される可能性があります。フラグメントが構成を変更してもインスタンスの状態を保持するかどうかは、Fragmentを離れたときにシステムがを破棄するかどうかには影響しませんActivity。Activity(つまり、ホームボタンを押して)離れると、 Fragmentsは破棄される場合と破棄されない場合があります。Activity戻るボタンを押してを離れると(つまり、を呼び出しfinish()て効果的に破棄するとActivity)、Activity接続Fragmentされているすべてのが破棄されます。
バックスタックのフラグメントで機能しないのはなぜですか?
サポートされていない理由はおそらく複数ありますが、私にとって最も明白な理由は、Activityがへの参照を保持し、FragmentManagerがFragmentManagerバックスタックを管理していることです。つまり、Fragmentsを保持することを選択したかどうかに関係なく、Activity(したがってFragmentManager'sバックスタック)は構成の変更時に破棄されます。それが機能しない可能性があるもう1つの理由は、保持されたフラグメントと保持されていないフラグメントの両方が同じバックスタックに存在することを許可された場合、物事がトリッキーになる可能性があるためです。
この方法を使用することが理にかなっているユースケースはどれですか?
保持されたフラグメントは、アクティビティインスタンス間で状態情報(特にスレッド管理)を伝播するのに非常に役立ちます。たとえば、フラグメントは、Threadまたはのインスタンスのホストとして機能し、AsyncTaskその操作を管理できます。詳細については、このトピックに関する私のブログ投稿を参照してください。
一般的に、私はそれを...で使用するonConfigurationChangedのと同じように扱いActivityます...あなたが怠惰すぎて向きの変更を正しく実装/処理できないという理由だけでそれをバンドエイドとして使用しないでください。必要な場合にのみ使用してください。