Fragment生命周期

Fragment是在Android3.0的时候,新增的概念,距离现在应该有比较长的时间了.
Fragment在Android中的表述是碎片化视图.
1.Fragment的作用是是在一个Activity中描述一些行为或者一部分用户界面.并且可以使用多个Fragment在一个单独Activity中,形成多个UI面板,也可以在多个Activity中重复调用.
2.Fragment拥有Activity的大多数功能,可以达到几乎取代Activity的作用,并且Fragment和Activity相比,它可以不用再清单文件中注册.
3.在Activity运行过程中,可以通过碎片管理者FragmentManager,添加、移除或者替换Fragment(add()、remove()、replace())
4.Fragment有自己的生命周期,并且它们的生命周期直接被其所属的宿主activity的生命周期影响。

那么和Activity一样,Fragment也有自己独特的生命周期,如下:
onAttach() 当Fragment与Activity发生关联时调用.
onCreatView() 创建该Fragment的视图.
onActivityCreat() 当Activity的oncreat方法返回时调用.
onDestoryView() Fragment的视图被移除时调用.
onDetach() Fragment与Activity关联被取消时调用.

这张图是Fragment从创建到销毁的全部流程.

下面这张图,是Activity和Fragment的生命周期对比.
这张图是Fragment和Activity的生命周期对比

(1)onAttach()方法,一般用Fragment和Activity,或者Fragment之间利用接口回调,相互通信.

(2)onCreatView()方法,正常Fragment在使用时,为了使创建的Fragment进行正常的UI交互,需要利用onCreatView()方法,使其返回其的根部局View视图,一般来说,这个view是你的fragment布局的根view. 如果fragment不提供UI, 可以返回null.

(3)onActivityCreated()方法,由上图中可以看出,onActivityCreated()方法,一般在oncreat()方法之后调用,一般情况,我都在onActivityCreated()的生命周期中,进行组件的实例化.

(4)onDestoryView()方法,一般使用的比较少,只有当和Fragment相关的View视图被移除时调用.

(5)onDetach()方法,与onAttach()方法相对应,Fragment的生命周期最后一个环节,回调此方法,Fragment的生命周期比较完整,Fragment也从内存中,完整的消失,也不会占用内存.

Fragment的生命周期特殊之处:
当一个Fragment被嵌入到一个Activity中时,它的生命周期直接受其所属的宿主Activity的生命周期影响:
比如,当Activity被暂停时,其中所有Fragment也会被暂停;
当Activity被销毁时,所有隶属于Activity的Fragment也都会被销毁.
但是当Activity正在运行(onResumed)的过程中, 这时候可以使用FragmentManager对Fragment进行单独的操作,增加或者移除,之类的.

处理fragment的生命周期
对于fragment的生命周期, 大多数生命周期和管理activity生命周期很像.和activity一样, fragment可以处于3种状态:
Resumed
在运行中的activity中fragment可见.
Paused
另一个activity处于前台并拥有焦点, 但是这个fragment所在的activity仍然可见(前台activity局部透明或者没有覆盖整 个屏幕).
Stopped
要么是宿主activity已经被停止, 要么是fragment从activity被移除但被添加到后台堆栈中.
停止状态的fragment仍然活着(所有状态和成员信息被系统保持着). 然而, 它对用户不再可见,当Activity再次被调用时,该Fragment也会被调用,而如果Activity的进程被杀死,那么Fragment的进程也不在存在.

下面内容是在forever_crying的专栏上的一些测试,测试各个场景的Fragment在不同状态下的生命周期.

场景演示 : 切换到该Fragment
11-29 14:26:35.095: D/AppListFragment(7649): onAttach
11-29 14:26:35.095: D/AppListFragment(7649): onCreate
11-29 14:26:35.095: D/AppListFragment(7649): onCreateView
11-29 14:26:35.100: D/AppListFragment(7649): onActivityCreated
11-29 14:26:35.120: D/AppListFragment(7649): onStart
11-29 14:26:35.120: D/AppListFragment(7649): onResume

屏幕灭掉
11-29 14:27:35.185: D/AppListFragment(7649): onPause
11-29 14:27:35.205: D/AppListFragment(7649): onSaveInstanceState
11-29 14:27:35.205: D/AppListFragment(7649): onStop

屏幕解锁
11-29 14:33:13.240: D/AppListFragment(7649): onStart
11-29 14:33:13.275: D/AppListFragment(7649): onResume

切换到其他Fragment:
11-29 14:33:33.655: D/AppListFragment(7649): onPause
11-29 14:33:33.655: D/AppListFragment(7649): onStop
11-29 14:33:33.660: D/AppListFragment(7649): onDestroyView

切换回本身的Fragment:
11-29 14:33:55.820: D/AppListFragment(7649): onCreateView
11-29 14:33:55.825: D/AppListFragment(7649): onActivityCreated
11-29 14:33:55.825: D/AppListFragment(7649): onStart
11-29 14:33:55.825: D/AppListFragment(7649): onResume

回到桌面
11-29 14:34:26.590: D/AppListFragment(7649): onPause
11-29 14:34:26.880: D/AppListFragment(7649): onSaveInstanceState
11-29 14:34:26.880: D/AppListFragment(7649): onStop

回到应用
11-29 14:36:51.940: D/AppListFragment(7649): onStart
11-29 14:36:51.940: D/AppListFragment(7649): onResume

退出应用
11-29 14:37:03.020: D/AppListFragment(7649): onPause
11-29 14:37:03.155: D/AppListFragment(7649): onStop
11-29 14:37:03.155: D/AppListFragment(7649): onDestroyView11-29 14:37:03.165: D/AppListFragment(7649): onDestroy
11-29 14:37:03.165: D/AppListFragment(7649): onDetach

正常的Fragment的生命周期,大致是这样的一个情况,这也是我现在能理解到的一个阶段.
另:本人博客会一直更新本人的学习安卓过程中的一些学习经验,如果有不足的地方,希望大家多多指教.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值