ViewPager 中Fragment 与一般Fragment生

作者: 魔术师6967 | 来源:发表于2016-04-17 18:04 被阅读4676次

背景介绍:

  今天面试,面试官问了很多Java、android方面细节的事情,比如说String、StringBuffer、StringBuilder、CharSequenece之间的区别,lanuchMode的四种模式应用场景、多线程的内部处理机制。而令我最印象深刻的是ViewPager 中Fragment 与一般Fragment生命周期的区别 ?

  虽然在项目中反复使用了viewPager、Fagment,但因为viewPager良好的封装性,使得在简单使用的时候不用了解更深层次的内部结构。但是,因为fagment真的太常用了,所以我们今天来聊一聊fragment复杂的生命周期。

一般Fragment生命周期

 fragment依赖于activity,所以他们生命周期是对应,顺便说一下Application的生命周期是包含activity,activity生命周期包含fragment,现在我们看看下面官方给出的Fragment LifeCycle:



 生命周期:

1.onAttach(Activity):  fragment 第一步是与activity绑定,当你想在这个阶段做点什么,就可以在fagment中复写这个方法;

2.onCreate(Bundle) : fragment 的 onCreate()方法;

3.onCreateView(LayoutInflater, ViewGroup, Bundle):  这个方法用得比较多,一般用来inflate布局,还可以通过Bundle恢复数据;

4.onActivityCreate(Bundle):  当activity调用onCreate()并完成后,通知fragment调用这个方法;

5.onViewStateRestore(Bundle):  保存下来的视图层次结构恢复成功后调用这方法;

6. onStart():   对应于activity的onStart()方法;

7.onResume():  对应于activity 的onResume()方法,fragment开始可见,fragment只有处于这个阶段才可以被替换或增加fagment,也就是说fragmentManager对fragment的管理只能在这个阶段进行

8.onPause():  fragment处于这个状态有两个原因;一是对应的activity处于这个状态,二是正在对fragment进行某种操作(比如删除fragment、替换fragment);

9.onStop():  与onPause()相似,同样的两个原因;

10. onDestroyView():  仅仅是清除视图;

11. onDestroy():  调用此方法清除fragment的状态;

12. onDetach():    解除绑定;

以上就是一般的fragment(不与viewpager绑定;在layout中作为自定义控件,或者是在代码中引用)的生命周期,它与activity有很密切的对应关系,可以总结为如下逻辑图:

ViewPager中fragment生命周期介绍:

 因为在ViewPager中fragment的管理是由adapter负责的。

对于FragmentPagerAdapter,当前视图的上一页仅视图被销毁了,所以它的onCreateView()会被调用到。

对于FragmentStatePagerAdapter,当前视图的上一页实例被销毁了,所以getItem()会被再次调用,整个Fragment对应的生命周期函数会再走一遍。

运行一个实例来说明:

下面是相关的生命周期函数调用情况:

当刚启动一个Activity时,Activity和Fragment都将被创建:


当Activity进入后台后:

当Activity返回前台后:



当Activity被销毁后:

最后总结:viewpager 中 使用 FragmentPagerAdapter 管理fragment时 和fragment 压到返回栈时都是调用onDestroyView() ———> onCreateView()来重新生成,而其他情况下都需要重新跑一遍生命周期。

注:Fragment的返回栈由Activity管理;而Activity的返回栈由系统管理

最后放一张概括周全的总结图:

参考:  01 https://segmentfault.com/q/1010000003719990

            02 Android Fragment的生命周期和返回栈 

            03 A Visualization of the Android Activity & Fragment Lifecycle

相关文章

网友评论

本文标题:ViewPager 中Fragment 与一般Fragment生

本文链接:https://www.haomeiwen.com/subject/moiilttx.html