为什么我应该使用 FragmentPagerAdapter 而不是 FragmentStatePagerAdapter?

Why should I use FragmentPagerAdapter instead of FragmentStatePagerAdapter?

我一直在寻找它,我发现的只是它们之间的区别。这不是重点。

如果您在 ViewPager 中使用 FragmentStatePagerAdapter,您最终将执行与使用 FragmentPagerAdapter 相同的操作,但消耗的内存要少得多。如果那是真的,我为什么要使用 FragmentPagerAdapter?

使用FragmentPagerAdapter有什么好处?

What is the advantages of using FragmentPagerAdapter?

速度,尤其是当您的页面数量居中时:足以轻松保存在内存中,但超出了 ViewPager 想要保存的少数页面。使用 FragmentStatePagerAdapter,当用户浏览寻呼机时,适配器会销毁一些片段并创建新片段。这需要时间,无论是直接 Java 代码还是对垃圾收集的影响。如果您在某些情况下不需要它,为什么要付出代价?

FragmentStatePagerAdapter: 如果您的页面包含更多片段,最好使用 FragmentStatePagerAdapter,因为它只会保存状态 的片段。 FragmentPagerAdapter: 由于 FragmentPagerAdapter 会将每个片段保存在内存中,因此它会消耗更多内存。

例如,如果您[在 Viewpager] 中有大约 3 个片段,其中包含较少 images/bitmaps,最好使用 FragmentPagerAdapter

为了优化更好地定义mViewPager.setOffscreenPageLimit(2); 设置在空闲状态下视图层次结构中当前页面任一侧应保留的页面数

如果您的结构依赖于嵌套片段,并且如果您需要在内部片段上使用 childFragmentManager,则 FragmentStatePagerAdapter 可能会出现堆栈问题。当我遇到这个问题时,我将 FragmentStatePagerAdapter 更改为 FragmentPagerAdapter,并且效果很好。