Fragment+LazyViewPager实现app主页的页面切换,使用的适配器为FragmentPagerAdapter。但是在使用的时候因为某个Fragment页面布局太复杂,导致切换卡顿。于是使用了ViewPager,因为有预加载,所以只要不是快速切换是可以避免卡顿现象的。但是在调试的时候发现了个问题,FragmentPagerAdapter这个适配器是不会立即销毁Fragment的,它和FragmentStatePagerAdapter的区别就是FragmentMManager会把每一个fragment放到内存里保存起来,下次使用的时候直接使用(请注意这一句话)。但是debug发现,切换的时候仍然会重新走每个Fragment的onCreateView方法,难道重新创建了Fragment?然后翻了下FragmentPagerAdapter的文档,发现了这么一句话
This version of the pager is best for use when there are a handful of typically more static fragments to be paged through, such as a set of tabs. The fragment of each page the user visits will be kept in memory,though its view hierarchy may be destroyed when not visible. This can result in using a significant amount of memory since fragment instances can hold on to an arbitrary amount of state. For larger sets of pages, considerFragmentStatePagerAdapter
.
原来如此,调试下,发现确实不会走onCreate和onDestroy这两个方法,只是走了 onCreateView。FragmentPagerAdapter只是保存呢了Fragment的对象在内存中,当下次使用时使用的也是这个对象(当然,如果长时间不用,FragmentManager会执行destroyItem这个方法,断掉与fragment的联系,fragment对象便有可能会被GC回收掉)。
附上Fragment的生命周期