【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显示呢而是将它摧毁了?因为按下返回键之后,系统会移除一个后台堆栈中的Fragment并将它摧毁,所以这里调用了onDestroy--》onDetach方法,将Fragment1摧毁了,而不是将它显示出来!!!

  • 再次按下返回键:

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

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

   

  三、源码下载

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

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

时间: 2024-11-05 18:35:59

【Android开发】之Fragment生命周期的相关文章

【Android开发-8】生命周期,Activity中打开另外一个Activity

前言:生命中有许多人陪伴自己走过一生中的某段旅程,只是有些人只是某阶段出现,有些人却陪伴自己很久.就像小学.中学.高中.大学,那些曾经以为会长久拥有的,当经历过天涯各地地忙碌于生活,或如意,或失意:渐渐地那些画面只剩回忆.天涯各自安命,能在一起的就尽力珍惜吧,不在一起地就衷心地祝福,我们都需要一种姿态生活下去!Android中的Activity的生命中,我们经常需要打开另外一个Activity,即另外一个界面.这个可能出现的时间很短暂,然后又回到主界面.但是这两个Activity都在各自的生命周

【Android开发-7】生命周期,Activity的生老病死

前言:生老病死,是每个人都要经历的事情.所以不必惊慌,静下心,想想自己在人生所处的每个阶段该做些什么,才能让自己的人生价值提高,或者说自身价值提高.在一个生命周期里,某个阶段该完成的事,没完成,也许就会影响到整个生命周期.所以有时候人生不能堕落,一堕落也许许多美好的事情就会错过了,等待你的就只有无声的忏悔! 对于Activity的生命周期的流程,最经典的一张图如下: 1.一个Activity A启动时,它会经历下面各个阶段: onCreate()-->onStart()-->onResume(

Android 学习之Fragment生命周期

本节学习Fragment的生命周期,我先看Google官网提供的Fragment的生命周期的流程图 那我们就通过上节的代码在Activity中和Fragment01和Fragment02中加入log, 关于代码我就不需要贴出了,我们用Log分析. a:在Activity中启动Fragment01 可以看到这个和上图的流程是一样的. b:然后按back键返回 可以看到显示Fragment先暂停,Activity再暂停,接着是Fragment停止,Activity停止,接着是Fragment销毁,A

【Android开发笔记】生命周期研究

启动 onCreate onStart onResume 退出键 onPause onStop onDestroy 锁屏 & 按住 home键 & 被其他Activity覆盖(SingleTask) onPause onStop 解锁 & 按住 home键后重新打开程序 & 被其他Activity覆盖(SingleTask)时,其他Activity按退出键 onRestart onStart onResume 应该在onPause()方法中保存状态,onResume()中获

Android Activity与Fragment生命周期 对应关系

Android之Activity,Fragment生命周期探知

Android之Activity,Fragment生命周期探知 - [email protected] - 博客频道 - CSDN.NET 根据官方文档,本人手画了一下Activity和Fragment的整个生命周期执行顺序图: Activity生命周期执行顺序图: Fragment生命周期执行顺序图: ? 一个Activity在它的整个生命周期里面分三个状态,分别是活动周期,可见周期,以及生命周期. 一个Fragment是依附于Activity之上,它的整个生命周期里面也分三个状态,分别是活动

Android Activity生命周期以及Fragment生命周期的区别与分析

Android Fragment生命周期图: Activity生命周期图: 对照图: Fragment生命周期分析: 1. 当一个fragment被创建的时候,它会经历以下状态. onAttach() onCreate() onCreateView() onActivityCreated() 2. 当这个fragment对用户可见的时候,它会经历以下状态. onStart() onResume() 3. 当这个fragment进入“后台模式”的时候,它会经历以下状态. onPause() onS

Android Activity Fragment 生命周期

从开源项目中看到 这个,就不由自主的收藏了~ https://github.com/xxv/android-lifecycle Android Activity Fragment 生命周期

Android开发之Activity和Fragment生命周期对比图

一.Activity 生命周期 二.Fragment 生命周期 三.对比图 四.测试代码 [java] view plaincopy package com.goso.testapp; import android.app.Activity; import android.app.ListFragment; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import a