FragmentStatePagerAdapter总是缓存当前页面与左右两边的页面。会删除距离当前界面较远的Fragment实例。
FragmentPagerAdapter会缓存所有已经创建的fragment实例。
destroyItem()方法中FragmentPagerAdapter调用事务的detach()方法,而FragmentStatePagerAdapter调用remove()方法移除Fragment。
Fragment生命周期
detach()方法执行到onDestroyView(),调用attach()方法后从onCreateView()执行到onResume()。
remove()方法执行到onDetach()。销毁实例。
ViewPager会始终缓存三个View。
三种Adapter的缓存策略
而三种Adapter的缓存策略则各有不同:
PagerAdapter:缓存三个,通过重写instantiateItem和destroyItem达到创建和销毁view的目的。
FragmentPagerAdapter:内部通过FragmentManager来持久化每一个Fragment,在destroyItem方法调用时只是detach对应的Fragment,并没有真正移除!
FragmentStatePagerAdapter:内部通过FragmentManager来管理每一个Fragment,在destroyItem方法 调用时移除对应的Fragment。
当展示的子Fragment多时候选择FragmentStatePagerAdapter。少的时候可以使用FragmentPagerAdapter