Fragment生命周期的几个问题

Fragment生命周期的几个问题

Fragment的基本介绍,一般通过官网可以获得比较好的了解,这里关于Fragment的生命周期,Android开发官网上没找到详细的描述,也没发现一些详细讲解的文章资料,所以研究了一下。

1、基础的:
fragment的声明周期依次是onAttach()->onCreate()->onCreateView()->onActivityCreated()->(没有onRestart)onStart()->onResume()->onPause()->onStop()->onDestoryView()->onDestory()->onDettach();

2、调用FragmentTransaction的commit时
(commit不能在onDestory中调用,会出错)Fragment的相关生命周并不会立即执行,它们组成的事务会放到Activity的PendingTrascation中,UI线程在适当的时候安排事务执行,所以这里有注意同步上的问题。比如提交add之后立即操作Fragment内的Context或者View是不行的。

3、关于onAttach方法:
通过实际测试发现,此方法在高版本上不会被调用,不管是通过xml代码添加,还是用Java动态添加的,只有在api 16的版本上,使用xml代码添加执行了此方法,估计应该是在api 16左右以下的版本中会此方法会有所调用。然而官网上说这里传入了activity,在这里获取activity实例,是个坑,所以一般不利用此方法做操作了。

4、关于onActivityCreated方法:

即使是在activity运行过程中切换Fragment,此方法也是会调用到的。而且它是在Fragment的View绘制完成之后调用,不知道为什么,可能是在onCreateView时后立即就完成了View绘制工作。


5、fragment周期与activity周期的关系:

首先如果在activity运行过程中主动的调用fragment的增删换操作,fragment会独立的走完对应的周期。
而对于在activity运行时没有主动调用的,fragment周期就会和activity周期产生相应的伴随关系。
从onCreate到onDestroy是和activity的生命周期对应的, (官方设计fragment的各种机制、回调什么的原则是和activity是相契合的,为了要方便的把fragment当做activity来使用,所以编写fragment代码时的就想着和activity几乎一样的使用。) 它们相对应的周期会挨着出现,考虑同种周期的前后关系,测试如下
因为fragment是放在activity上面的,它们满足基础-上层关系,所以两个同种周期,对于创建型周期(onCreate-onResume),activity的 先于 fragment的对应周期 调用,而销毁型周期,fragment的会先于activity的 对应周期 调用,就行对象的创建和销毁一样。

6、fragment生命周期与回退栈的关系:

如果不添加到回退栈,调用replace或者remove( = replace+add), 这个fragment会完全销毁,调用到onDettach方法那儿。
如果添加到回退栈,既在commit之前调用addToBackStack,会调用到onDestroyView,再次会退到这个Fragment时会从onCreateView开始。
如果调用hide/show方法,这时应该是什么周期都不调用,只会调用一个onHiddenChanged函数,可以在这里面做一些处理。

4、fragment周期与activity周期的关系:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值