美文网首页Android学习日志
Fragment生命周期研究

Fragment生命周期研究

作者: 阿运鸣鸣 | 来源:发表于2018-03-07 17:35 被阅读0次

一、fragment生命周期



    onInflate:在xml文件中用标签语言直接定义时会掉用此方法。

    onAttach:fragment被添加到activity中会回调,此方法一次生命周期中只会被调用一次。执行该方法时,fragment已经和activity绑定完成。该方法有一个activity类型参数,代表所绑定的activity,在此方法内可以执行mActivity=activity等此类操作。

    onCreate:创建fragment时回调,一次生命周期只会调用一次。可通过savedInstanceState获取之前的保存值。

    onCreateView:每次创建、绘制fragment的view组件时回调,会将显示的view返回。性能角度考虑不建议执行耗时操作如数据库数据加载等。

    onActivityCreate:当activity启动完成后调用。也就是当activity执行完onCreate方法后并返回。也就是说执行到这个方法后activity才是初始完,在这个方法内fragment才能开始和activity进行交互的UI操作,如若提前进行交互会导致报空。

    onStart:启动fragment时被调用。fragment从不可见状态变成可见状态。

    onResume:onStart后肯定会调用这个方法,onStart时变为可见,而此方法作用是使fragment可以和用户交互。

    “9”:此后进入运行状态。

    “10”:一种是activity转到后台,或者fragment被删除替换;二是fragment被加入back栈

    onPause:发生“10”中的情况,fragment被暂停时调用。所谓暂停就是说可见,不能与用户交互。

    “13”:进入暂停状态。同时onSaveInstanceState()方法被调用,保存当前Fragment的状态值。即使Fragment被回收又重新创建,一样能恢复。

    onStop:执行该方法时,Fragment完全不可见。 

    onDestroyView:销毁与Fragment有关的视图,但未与Activity解除绑定。从fragment的back栈中找回时依然可以通过onCreateView()方法重新创建视图。通常在ViewPager+Fragment的方式下会调用此方法。

    onDestroy:销毁Fragment。通常按Back键退出或者Fragment被回收时调用此方法。

    onDetach:解除与Activity的绑定。在onDestroy方法之后调用。onDestroy方法后必定会调用此方法。

    解释

        1. 不可见状态:锁屏、回到桌面、被Activity完全覆盖

        2. 部分可见状态:打开Dialog样式的Activity

        3. 退出应用:onPause()->onStop()->onDestroyView()->onDestroy()->onDetach()(退出不会调用onSaveInstanceState方法);

        4. 被回收又重新创建/横竖屏切换:被回收执行onPause()->onSaveInstanceState()->onStop()->onDestroyView()->onDestroy()->onDetach(),重新创建执行onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()->setUserVisibleHint();(setUserVisibleHint()属于懒加载,严格上说不属于生命周期,其重要程度可以看成一个生命周期中的一环节)

        5. 除了onCreateView,其他的生命周期方法如果重写,必须调用父类对于该方法的实现。 因为fragment受到activity生命周期影响。

        6. fragment嵌套在activity中,受到activty生命周期影响。当然fragment也可以嵌套在 fragment中,这时其生命周期将会不可控,所以不建议。

        7. 官方文档说创建Fragment时至少需要实现三个方法:onCreate( ),onCreateView( ),OnPause( ); 

        8. Fragment的生命周期有:三种状态:

                Resumed:在允许中的Fragment可见

                Paused:所在Activity可见,但是得不到焦点

                Stoped: ①调用addToBackStack(),Fragment被添加到Bcak栈 ②该Activity转向后台,或者该Fragment被替换/删除

一、与activity生命周期相比:

        人们学习新的知识总要结合旧的知识进行对比,接受新的认识时也伴随着旧认识的结合。fragment本就依赖于activity,且我们首先掌握的肯定是activity。

        与activity比较,从图中可以看到区别在于:

        1. onAttach(Activity)

            当Activity与Fragment发生关联时调用

        2. onCreateView(LayoutInflater,ViewGroup,Bundle);

            创建该Fragment的视图,与onCreate有区别

        3. onActivityCreate(bundle);

            当Activity的onCreate();方法返回时调用,这里看不明白没关系,下面我们细细讨论

        4. onDestoryView();

            与onCreateView相对应,当改Fragment被移除时调用

        5. onDetach();

            与onAttach()相对应,当Fragment与Activity的关联被取消时调用

相关文章

网友评论

    本文标题:Fragment生命周期研究

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