最近使用ViewPager+Fragment的组合,遇到一些生命周期以及缓存的问题,总结一下。
第一次创建Fragment的时候,其实执行了这么多方法:
onAttach -> onCreate -> onCreateView ->onViewCreated -> onActivityCreated
-> onViewStateRestored -> onStart -> onResume
其中onViewCreated、onViewStateRestored官方帮助没有提到,但你有时确实可以用到。
按HOME键或者打开别的应用时:
onPause -> onStop
从桌面回来或者从别的应用回来:
onStart -> onResume
我在将Fragment和ViewPager一起使用的时候(使用FragmentPagerAdapter !!),还遇见过这种情况,ViewPager中有三个Fragment1、2、3,通过ViewPager从Fragment2切换到Fragment3的时候Fragment1执行的是:
onPause -> onStop -> onDestroyView
onCreateView -> onViewCreated -> onActivityCreated -> onViewStateRestored
-> onStart -> onResume
退出ViewPager所在的Activity的时候Fragment被彻底销毁将要执行的是:
onPause -> onStop -> onDestoryView -> onDestory -> onDetach
这种情况是在ViewPager的缓存页默认为1的情况,而且ViewPager是使用FragmentPagerAdapter适配器的,如果使用的是FragmentStatePagerAdapter由于该 Adapter 的实现将只保留当前页面,当页面离开视线后,就会被消除,释放其资源,所以三个Fragment切换时就如同不断地退出Activity和进入Activity。
资料:
http://feelyou.info/fragment_lifecycle/
http://www.cnblogs.com/lianghui66/p/3607091.html