android fragment 嵌套 生命周期,【Android开发】之Fragment生命周期,androidfragment

【Android开发】之Fragment生命周期,androidfragment

上一篇博客我们讲到了,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生命周期。

9e259b3729ef117d196919042139278f.png

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

b8c6f28911396954512da9b41065f64c.png

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

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

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

7a0283697ba62d6f98d6fe7523220fa6.png

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

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

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

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

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

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

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

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

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

0acbca078a2b3e8b1bbbbdf03ae3bb6d.png

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

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

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

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

f34c46e4924485f4702d4cab099a7356.png

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

Fragment1:onDestroy--》onDetach

为什么会这样呢?是不是很奇怪?亮瞎了我的双眼!为什么不调用Fragment1显示呢而是将它摧毁了?因为按下返回键之后,系统会移除一个后台堆栈中的Fragment并将它摧毁,所以这里调用了onDestroy--》onDetach方法,将Fragment1摧毁了,而不是将它显示出来!!!

再次按下返回键:

1a90116eec088b016cd5171d35b40424.png

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

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

三、源码下载

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

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

安卓开发 fragment 切换问题

咳咳,去API guide中看看fragment,里面有一样的例子

安卓开发 在fragment中嵌套

FragmentActivity是继承自Activity,是一个Activity,你怎么能在Activity中显示另一个Activity呢。所以右侧想实现左右滑动要用fragment+viewpager来实现。

给你个开源项目你参考一下吧

github.com/...icator

http://www.dengb.com/Androidjc/870579.htmlwww.dengb.comtruehttp://www.dengb.com/Androidjc/870579.htmlTechArticle【Android开发】之Fragment生命周期,androidfragment 上一篇博客我们讲到了,Fragment的基本使用,相信大家都已经了解怎么去使用了。如果还有不...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值