对Fragment加载的理解
1.FragmentPagerAdapter和FragmentStatePagerAdapter的区别:
ViewPager默认机制为:预加载当前页及前后两页内容,切换时,会缓存该页及前后两页内容,同时销毁之外的其他Fragment;如果使用的是FragmentPagerAdapter则不会执行onDestroy()方法,而会执行onDestroyView()方法,依然会占用一部分内存;而使用FragmentStatePagerAdapter则会执行onDestroy()方法,释放该Fragment所占用的内存,对于需要占用大量内存的Fragment来说,使用后者能达到节省内存的目的;
2.setOffscreenPageLimit(int count)方法的使用:
count最小值为1,设置小于1的数无效;也就是Viewpager至少缓存当前页及前后两页的内容,如果为2,则缓存当前页及前后四页的内容;
3.Fragment的懒加载:
有时候我们不需要ViewPager的预加载机制,而setOffscreenPageLimit(int count)方法中的count至少为1,所以可以在Fragment上下功夫,通过重写setUserVisibleHint(boolean isVisibleToUser)方法,当该Frament可见时,再去做加载数据等操作处理,达到懒加载的目的;
加载数据需要在OnCreateView及Fragment可见双重条件下去执行,而可见与否的回调和onCreateView方法的回调并无严格的先后顺序,所以可以设置两个标识,当onCreateView执行后将标识1置为true,判断是否可见,如果可见则调获取数据方法;当在可见与否的回调中,可见时,将可见标识置为true,判断是否可以加载数据;
4.实现懒加载并取消缓存Fragment的实现:
此时建议不使用ViewPager,而是用一个ViewGroup动态的去replace替换其中的Fragment,replace先会执行remove操作而后进行add操作,remove掉的Fragment会执行onDestroy方法;可以使用FragmentTransaction.setCustomAnimations()方法,给Fragment切换时设置一个动画,这样可以使切换时不是那么突兀;