2018
写在前面:这篇文章主要分析导航栏,也就是ViewPager+Fragment+FragmentPagerAdapter的懒加载模式,重点还是Fragment生命周期的应用。
如果对如何使用导航栏还不太了解,可以看看 底部导航栏标签切换的实现 这篇文章。
(一)Fragment生命周期
大家都知道 Fragment 是绑定 Activity 的,不过,很多人会忽视了它们的生命周期也是会一定程度上同步的。下面表格的场景是在 Activity 内部实例化 Fragment,Fragment 与 Activity 生命周期之间的关系。
Activity | Fragment |
---|---|
onCreate() | onAttach(), onCreateView(), onCreateView, onActivityCreate() |
onStart() | onStart() |
onResume() | onResume() |
onPause() | onPause() |
onStop() | onStop() |
onDestroy() | onDestroyView(), onDestroy(), onDetach() |
大多数时候我们将实例化 Fragment 放在 Activity.onCreate()
中,如new
一个实例对象。不难理解 Fragment 在Activity.onCreate()
之后才开始一系列生命周期方法的调用。而其他方法执行顺序会是下面这样:
Activity.onStart()-->Fragment.onStart()
Activity.onResume()-->Fragment.onResume()
Fragment.onPause()-->Activity.onPause()
Fragment.onStop()-->Activity.onStop()
Fragment.onDestroyView(),onDestroy(),onDetach()-->Activity.onDestroy()
Fragment 依赖于 Activity,故而,Fragment创建于Acivity之后,销毁于Acrivity之前。
ViewPager中Fragment的生命周期
结合 ViewPager 后,页面切换会有哪些生命周期方法的调用?
看过上一篇博文的朋友应该都比较清楚了,这里就再不厌其烦地给没看过的朋友讲解一下。
单独使用Fragment没什么好说的,调用的方法和上表一样,会和 Activity 同步。而结合 ViewPager 取决于选择哪一种适配器,现在大多数使用 FragmentPagerAdapter或者 FragmentPagerStateAdapter,两者的区别是到底会不会回收Fragment的内存。
前者只回收View,除非内存不足,否则不会销毁加载好的Fragment;后者为达到节省内存的目的,对于不在当前页面左右两边的其他Page,将会销毁其Fragment,只保留最多三个页面在内存中。
针对 FragmentPagerAdapter 的测试
Fragment-->
代表的是第一个Fragment 的生命周期,Activity-->
代表与之关联的活动的生命周期:
// 程序启动,初始化活动
I/