1

私はそれを探していて、見つけたのはそれらの違いだけでした。そして、それはポイントではありません。FragmentStatePagerAdapterの代わりにFragmentPagerAdapterを使用するのはなぜですか?

FragmentStatePagerAdapterViewPagerに入力すると、FragmentPagerAdapterの場合と同じ結果が得られますが、メモリ消費は非常に少なくなります。それが真実なら、どうして私はFragmentPagerAdapterを使うべきですか?

FragmentPagerAdapterを使用する利点は何ですか?

答えて

3

FragmentPagerAdapterを使用する利点は何ですか?

特に、中間のページ数を持っている場合は、メモリに簡単に保持できますが、一握りを超えると、ViewPagerはそれ自体を保持します。 FragmentStatePagerAdapterでは、ユーザーがページャーをナビゲートすると、アダプターはいくつかのフラグメントを破棄して新しいフラグメントを作成します。これには、Javaコードの直接的な意味と、ガーベッジ・コレクションへの影響の両方の面で時間がかかります。場合によってはそれを必要としない場合は、なぜ価格を支払うのですか?

+0

'FragmentStatePagerAdapter'を使うとガベージコレクションへの影響は分かりません。なぜなら、フラグメント全体をメモリに保持していないからです。 'FragmentPagerAdapter'はGCに大きな影響を与えますか? –

+1

@LennonPetrick: 'FragmentPagerAdapter'は* memory *に大きな影響を与えます。 'FragmentStatePagerAdapter'は* GC *に大きな影響を与えます。私たちは10ページあるとします。ユーザーは退屈で、最初のページからすべてのページを最後までスワイプし、最初にスワイプします。 'FragmentPagerAdapter'は10個のフラグメントを作成して保持しますので、メモリ圧を上げてください。しかし、「FragmentStatePagerAdapter」は途中で〜14個のフラグメントを作成して破棄し、レイアウトを膨らませて余分な作業をし、GCのプレートに多くのゴミを投棄します。 – CommonsWare

+0

'FragmentStatePagerAdapter'はすべてを破壊して作成しているので、フラグメントを破棄するたびに、そのすべてのガーベジがGCに直接ダンプされます。 すばらしい説明!!どうもありがとうございました!! –

0

FragmentStatePagerAdapter: あなたのページには、それがフラグメントの状態のみ が保存されますので、FragmentStatePagerAdapterを使用する方がより断片が含まれている場合。 FragmentPagerAdapter: FragmentPagerAdapterはメモリ内の各フラグメントを結果として保持するため、より多くのモモリを消費します。

mViewPager.setOffscreenPageLimitを定義するために、より良い最適化のためにFragmentPagerAdapter

で行く方が良い小さい画像/ビットマップが含まれていますが、[Viewpager中]の周りの3断片を持っている場合、例えば(2); アイドル状態のビュー階層内の現在のページのいずれかの側に保持するページ数を設定します。

+0

あなたは私の質問に答えなかった。私は彼らの違いを知っていると言いました。しかし、私の質問は、 'FragmentPagerAdapter'がより多くのメモリを消費する場合でした。どうして私はそれを使うべきですか? 'FragmentPagerAdapter'は' FragmentStatePagerAdapter'と同じことをしますので、 –

関連する問題