Fragment的生命周期

在做项目的过程中,经常用到Fragment,在网上找了一下资料,看了一下感觉都不太全,于是我自己根据网上的资料,整理一份Fragment的生命周期。

Fragment的生命周期图:

   



(1)onAttach()//当一个Fragment对象关联到一个Activity时调用。

(2)onCreate()//初始创建Fragment对象时调用。

(3)onCreateView()//创建与Fragment对象关联的View视图时调用。

(4)onActivityCreated()//Activity对象完成自己的onCreate方法时调用。

(5)、onStart()//Fragment对象在ui可见时调用。

(6)onResume()//Fragment对象的ui可以与用户交互时调用。

(7)onPause()//Fragment对象可见,但不可交互。有Activity对象转为onPause状态时调用。

(8)onStop()//有空间完全遮挡;或者宿主Activity对象转为onStop状态时调用。

(9)onDestroyView()//Fragment对象清理view资源时调用,也就是移除fragment中的视图。

(10)onDestroy()//Fragment对象完成对象清理View资源时调用。

(11)onDetach()//Fragment对象没有与Activity对象关联时调用。


当一个fragment被创建的时候执行1-4;

当这个fragment创建完毕,到对用户可见的时候,执行5-6;

当这个fragment从可见到不可见时,执行7-8;

当这个fragment被销毁了(或者持有它的activity被销毁了),执行9-11;



管理fragment的生命周期有些像管理activity的生命周期。Fragment可以生存在三种状态:

Resumed:

Fragment在一个运行中的activity中并且可见。

Paused:

另一个activity处于最顶层,但是fragment所在的activity并没有被完全覆盖(顶层的activity是半透明的或不占据整个屏幕)。

Stoped:

Fragment不可见。可能是它所在的activity处于stoped状态或是fragment被删除并添加到后退栈中了。此状态的fragment仍然存在于内存中。

同样类似于activity,你可以把fragment的状态保存在一个Bundle中,在activity被recreated时就需用到这个东西。你可以在onSaveInstanceState()方法中保存状态并在onCreate()或onCreateView()或onActivityCreated()中恢复,关于更多的保存状态的信息,请参考Activitys章节。

Fragment与Activity的生命周期中最大的不同就是存储到后退栈中的过程。Activity是在停止时自动被系统压入停止栈,并且这个栈是被系统管理的;而fragment是被压入activity所管理的一个后退栈,并且只有你在删除fragment后并明确调用addToBackStack()方法时才被压入。

然而,管理fragment的生命周期与管理activity的生命周期极其相似。你所需要去思考的是activity的生命周期如何影响fragment的生命周期。


Activity生命周期图跟Fragment生命周期图对比

 

Activity直接影响它所包含的fragment的生命周期,所以对activity的某个生命周期方法的调用也会产生对fragment相同方法的调用。例如:当activity的onPause()方法被调用时,它所包含的所有的fragment们的onPause()方法都会被调用。

Fragment比activity还要多出几个生命周期回调方法,这些额外的方法是为了与activity的交互而设立,如下:

onAttach()

当fragment被加入到activity时调用(在这个方法中可以获得所在的activity)。

onCreateView()

当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout(界面)。

onActivityCreated()

当activity的onCreated()方法返回后调用此方法。

onDestroyView()

当fragment的layout被销毁时被调用。

onDetach()

当fragment被从activity中删掉时被调用。

一旦activity进入resumed状态(也就是running状态),你就可以自由地添加和删除fragment了。因此,只有当activity在resumed状态时,fragment的生命周期才能独立的运转,其它时候是依赖于activity的生命周期变化的。


Fragment演示:

场景演示 : 切换到该Fragment

 onAttach--->onCreate--->onCreateView--->onActivityCreated---> onStart---> onResume

屏幕灭掉:

 onPause--->onSaveInstanceState--->onStop

屏幕解锁

onStart--->onResume

切换到其他Fragment:
onPause---> onStop---> onDestroyView

切换回本身的Fragment:

onCreateView---> onActivityCreated--->onStart--->onResume

回到桌面

 onPause---> onSaveInstanceState--->onStop

回到应用

onStart---> onResume


退出应用

onPause--->onStop--->onDestroyView--->onDestroy---> onDetach




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值