Fragment的生命周期在不同的场景下,可以有不同的形式:
通常通过FragmentManager管理的Fragment生命周期(通过remove或者replace替换fragment)为:
创建:onAttach->onCreate->onCreateView->onActivityCreated->onStart->onResume
回收:onPause->onStop->onDestroyView->onDestroy->onDetach
另外,我们可以通过show和hide来替换在界面上显示的Fragment,show和hide不影响Fragment的生命周期,可以通过这样的方式来缓存Fragment,提高切换速度(当然存在一定的内存成本)。
通过ViewPager和FragmentPageAdapter的组合使用Fragment的情况下,Fragment会被回收后再使用:
默认情况下,ViewPager为保留当前Fragment,及前后的一个Fragment:
如上如所示情况下,上新,最后疯抢,童装三个fragment会被保留,而其他fragment会被释放,等待重用。这个行为可以通过ViewPager.setOffsetPageLimit函数修改。
创建:onAttach->onCreate->onCreateView->onActivityCreated->onStart->onResume
释放以待下次使用:onPause->onStop->onDestroyView
再次使用:onCreateView->onActivityCreated->onStart->onResume
彻底释放(通常是ViewPager所在的Activity回收了):onPause->onStop->onDestroyView->onDestroy->onDetach
最后,在ViewPager中,我们可以通过onSaveViewState函数和onCreate/onCreateView/onActivityCreated来保存和恢复数据。