我一直在寻找相关内容,但我只找到了它们之间的区别,这并不是重点。
如果您在ViewPager
中使用FragmentStatePagerAdapter
,那么您将与FragmentPagerAdapter
做的事情相同,但消耗的内存要少得多。既然如此,为什么我还要使用FragmentPagerAdapter
呢?
使用FragmentPagerAdapter
的优势是什么?
我一直在寻找相关内容,但我只找到了它们之间的区别,这并不是重点。
如果您在ViewPager
中使用FragmentStatePagerAdapter
,那么您将与FragmentPagerAdapter
做的事情相同,但消耗的内存要少得多。既然如此,为什么我还要使用FragmentPagerAdapter
呢?
使用FragmentPagerAdapter
的优势是什么?
FragmentStatePagerAdapter: 如果您的页面包含更多的片段,最好使用FragmentStatePagerAdapter,因为它只会保存片段的状态。 FragmentPagerAdapter: 而FragmentPagerAdapter会将每个片段保留在内存中,因此它会消耗更多的内存。
例如,如果您在ViewPager中有大约3个包含较少图像/位图的片段,则最好使用FragmentPagerAdapter。
为了优化,最好定义mViewPager.setOffscreenPageLimit(2); 设置应在空闲状态下保留在视图层次结构中当前页面两侧的页面数量。
FragmentPagerAdapter
消耗更多的内存,为什么我要使用它?因为FragmentPagerAdapter
和FragmentStatePagerAdapter
做的事情是一样的。 - Lennon SpirlandellichildFragmentManager
,那么您可能会在FragmentStatePagerAdapter
中遇到堆栈问题。当我遇到这个问题时,我将FragmentStatePagerAdapter
更改为FragmentPagerAdapter
,然后它就可以正常工作了。FragmentStatePagerAdapter
的问题,因为我使用了getChildFragmentManager()
,导致我的视图无法点击。只有在滚动后才能点击。 - M DEV
FragmentStatePagerAdapter
会对垃圾回收有什么影响,因为它不会将整个片段保留在内存中。FragmentPagerAdapter
对 GC 的影响会更大,是吗? - Lennon SpirlandelliFragmentPagerAdapter
对内存的影响更大。FragmentStatePagerAdapter
对GC的影响更大。假设我们有10个页面。用户感到无聊时,从第一页开始通过所有页面滑动到最后一页,然后向后滑动回到开头。FragmentPagerAdapter
将创建并保持 10 个片段,因此增加了内存压力。FragmentStatePagerAdapter
将在途中创建和销毁 ~14 个片段,强制额外工作以充气布局等,并向 GC 转储大量垃圾。 - CommonsWareFragmentStatePagerAdapter
会不断地销毁和创建所有的片段,每当它销毁一个片段时,该片段的所有垃圾都将直接被丢到 GC 中。 非常好的解释!!非常感谢!! - Lennon Spirlandelli