zoukankan      html  css  js  c++  java
  • 【Android开发】之Fragment生命周期

     

      上一篇博客我们讲到了,Fragment的基本使用,相信大家都已经了解怎么去使用了。如果还有不懂得同学可以去看一下,传送门。现在我们来讲解一下Fragment的生命周期。

      一、Fragment的事务

        再讲Fragment的生命周期之前,一定要讲一下FragmentTransaction也就是fragment的事务,这对我们理解生命周期有很重要的作用。

        那么什么是事务?根据用户的交互情况,对fragment进行添加(add)、移除(remove)、替换(replace),以及执行其他动作,提交给activity的每一套变化,被称为一个事务。事务当中存在一个堆栈的数据结构,它允许用户经由fragment的变化往回导航(就是和activity回跳类似,这和activity之间跳转实现都是一样的,均用堆栈实现)。用户可以通过添加FragmentTransaction.addToBackStack(null)函数(一定要在FragmentTrasaction.commit()之前调用),将此Fragment添加到后台堆栈。了解了事务之后我们再来看一下Fragment的生命周期。

      二、Fragment生命周期

        上篇有提到我们将Fragment看成是“小Activity”,相信熟知activity的同学都知道,掌握Activity的生命周期在安卓开发中是很有必要的。下面就为大家带来Fragment的生命周期图,并且通过几个小例子来深度理解Fragment生命周期。

          

        一、我们先创建一个Fragment1(没有将它加入到后台堆栈中,即没有调用FragmentTransaction.addToBackStack(null)函数)并将它显示,查看Logcat:

        

        我们发现,当Fragment1被创建的时候,调用的顺序为:

         Fragment1:onAttach--》--》Activity的onAttachFragment--》onCreate--》onCreateView--》onActivityCreated--》onStart--》onResume

    • 现在我们用Fragment2(也没有添加到后台堆栈),采用replace的方法将Fragment1替换掉,会出现什么样的情况:

        

        观察Logcat,我们发现这个时候它的执行顺序是:

         Fragment1:onPause--》onStop--》onDestroyView--》onDestroy--》onDetach

         Fragment2:onAttach--》Activity的onAttachFragment--》onCreate--》onCreateView--》onActivityCreated--》onStart--》onResume

       二、如果我们在创建Fragment1的时候,将它加入到后台堆栈中(即调用FragmentTransaction.addToBackStack(null)函数),那么结果会是怎么样子的呢?当然Fragment1的执行顺序还是和原来一样。

    • 我们重点来看一下,用Fragment2(采用添加到后台堆栈),采用replace的方法将Fragment1替换掉,会出现什么样的情况:  

    这时候我们看到,它的执行顺序是:

        Fragment1:onPause--》onStop--》onDestroyView。这里并没有执行onDestroy--》onDetach,这是因为我们将Fragment1添加到后台堆栈中了,所以并没有摧毁掉Fragment1

        Fragment2:onAttach--》Activity的onAttachFragment--》onCreate--》onCreateView--》onActivityCreated--》onStart--》onResume

        

    •   现在我们按下返回键,此时Fragment1将再次显示出来:

        

        这时候我们看到,它的执行顺序是:

          Fragment1:onCreateView--》onActivityCreated--》onStart--》onResume

          Fragment2:onPause--》onStop--》onDestroyView--》onDestroy--》onDetach

      三、这时候有同学会问了,如果我们启动Fragment2的时候,没有将他加入到后台堆栈中呢?按下返回键后,他的调用又是怎么样的呢?那么让我们来看一下:

        

        我们可以看到执行顺序为:

        Fragment1:onDestroy--》onDetach

        为什么会这样呢?是不是很奇怪?为什么不调用Fragment1显示呢而是将它摧毁了?因为按下返回键之后,我们的Fragment2是通过replace的方式添加的,所以它就先执行remove然后在add Fragment到主界面当中。所以不存在Fragment1了,就调用了onDestroy--》onDetach

    • 再次按下返回键

        我们可以看到执行顺序为:

        Fragment2:Activity的onPause--》onPause--》Activity的onStop--》onStop--》Activity的onDestory--》onDestroyView--》onDestory--》onDetach

       

      三、源码下载

         这是生命周期测试的源码,如果对上面所讲述的还是不清楚,那么可以下载源码,自己运行一下。点我下载

      下一节我还会针对Fragment的详细使用进行解析,欢迎订阅。我的CSDN博客:http://blog.csdn.net/u010049692/article/details/38926561

  • 相关阅读:
    iOS 面试题搜集
    iOS 常用第三方类库、完整APP示例
    iOS 键盘遮挡输入 解决办法
    iOS UIColor RGB HEX
    iOS APP性能优化
    iOS Swift 数组 交换元素的两种方法
    iOS CoreData primitive accessor
    iOS Start developing ios apps (OC) pdf
    iOS 传值方式
    iOS IB_DESIGNABLE IBInspectable @IBDesignable @IBInspectable 加速UI开发
  • 原文地址:https://www.cnblogs.com/getherBlog/p/3945052.html
Copyright © 2011-2022 走看看