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