Fragment 的生命周期

 Fragment生命周期如下图所示:




实际演示结果:


切换到该Fragment: :

08-06 14:01:51.896: E/Test(20503): TestFragment==========onAttach()
08-06 14:01:51.896: E/Test(20503): TestFragment==========onCreate()
08-06 14:01:51.896: E/Test(20503): TestFragment==========onCreateView()
08-06 14:01:51.897: E/Test(20503): MainActivity==========onCreate()
08-06 14:01:51.897: E/Test(20503): TestFragment==========onActivityCreated()
08-06 14:01:51.897: E/Test(20503): MainActivity==========onStart()
08-06 14:01:51.897: E/Test(20503): TestFragment==========onStart()
08-06 14:01:51.897: E/Test(20503): MainActivity==========onResume()
08-06 14:01:51.897: E/Test(20503): TestFragment==========onResume()



切换到其他Fragment:
 08-06 14:01:53.896: E/Test(20503): TestFragment==========onPause()
 08-06 14:01:53.896: E/Test(20503): TestFragment==========onStop()
 08-06 14:01:53.896: E/Test(20503): TestFragment==========onDestroyView()


切换该回Fragment:

 08-06 14:01:53.896: E/Test(20503): TestFragment==========onCreateView()
 08-06 14:01:53.896: E/Test(20503): TestFragment==========onActivityCreated()
 08-06 14:01:53.896: E/Test(20503): TestFragment==========onStart()
 08-06 14:01:53.896: E/Test(20503)TestFragment==========onResume()


按home回到桌面:

08-06 13:55:51.750: E/Test(20503): TestFragment==========onPause()
08-06 13:55:51.751: E/Test(20503): MainActivity==========onPause()
08-06 13:55:52.357: E/Test(20503): TestFragment==========onStop()
08-06 13:55:52.357: E/Test(20503): MainActivity==========onStop()


回到应用:

08-06 13:57:07.411: E/Test(20503): MainActivity==========onStart()
08-06 13:57:07.411: E/Test(20503): TestFragment==========onStart()
08-06 13:57:07.411: E/Test(20503): MainActivity==========onResume()
08-06 13:57:07.411: E/Test(20503): TestFragment==========onResume()


退出应用:

08-06 13:58:31.110: E/Test(20503): TestFragment==========onPause()
08-06 13:58:31.110: E/Test(20503): MainActivity==========onPause()
08-06 13:58:31.677: E/Test(20503): TestFragment==========onStop()
08-06 13:58:31.677: E/Test(20503): MainActivity==========onStop()
08-06 13:58:31.677: E/Test(20503): TestFragment==========onDestroyView()
08-06 13:58:31.677: E/Test(20503): TestFragment==========onDestroy()
08-06 13:58:31.677: E/Test(20503): TestFragment==========onDetach()
08-06 13:58:31.677: E/Test(20503): MainActivity==========onDestroy()


屏幕熄掉:

08-06 13:59:45.722: E/Test(20503): TestFragment==========onPause()
08-06 13:59:45.722: E/Test(20503): MainActivity==========onPause()
08-06 13:59:45.837: E/Test(20503): TestFragment==========onStop()
08-06 13:59:45.838: E/Test(20503): MainActivity==========onStop()


屏幕解锁:

08-06 14:00:21.936: E/Test(20503): MainActivity==========onStart()
08-06 14:00:21.938: E/Test(20503): TestFragment==========onStart()
08-06 14:00:21.949: E/Test(20503): MainActivity==========onResume()
08-06 14:00:21.950: E/Test(20503): TestFragment==========onResume()


处理fragement的生命周期

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

Resumed:

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

Paused:

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

Stoped:

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

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

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

使fragment能够呈现可见状态(能够与用户交互)的一些列核心生命周期方法有:

onAttach

    当fragment和它的activity有关联的时候被调用

 

onCreate

    整个系统创建fragment时调用,用来初始化fragment,相当于activity的onCreate

 

onCreateView

    当第一次创建用户界面的回调方法,返回与fragment相关的视图

 

onActivityCreated

    通知fragment它自己的activity已经完成

 

onViewStateRestored

    告知fragment 其视图层次的所有保存的状态都已经恢复了

 

onStart

    使fragment对用户可见(基于包含它的activity已经启动了)

 

onResume

    使fragment与用户可进行交互(基于包含它的activity已经处于resume状态)

 

 

当一个fragment不再被使用的时候,它会经过一系列的反向回调方法:

 

onPause

    fragment不再与用户进行交互,要么由于activity处于暂停态,要么由于在activity中一个fragment的操作正在被修改

 

onStop

    fragment不再与用户可见,要么因为它的activity被停止,要么因为在activity中一个fragment的操作正在被修改

 

onDestroyView

    允许fragment清理它的资源视图

 

onDestroy

    被调用去做fragment状态的最终清理

 

onDetach

    在fragment不再与其activity有关联之前立刻调用

 

 

在上述fragment的生命周期中,大多数程序都必须要去实现的是onCreate,onCreateview和onPause三个回调的方法

 

--------------------------------------------------------------------------------------------------------------------------------------------------------通常我们会继承系统内置的fragment的三个派生类:

DialogFragment

对话框式的Fragments。可以把fragmentdialog并入到activity的返回栈中,使用户能再返回到这个对话框。

 

ListFragment

显示一个列表控件,就像ListActivity类,它提供了很多管理列表的方法,onListItemClick和setListAdapter等

 

PreferenceFragment

显示一个Preference对象组成的列表,类似PreferenceActivity,主要用来创建设置界面



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值