Fragment的生命周期

Fragment的生命周期

Fragment的生命周期

在介绍了Activity的生命周期之后,本篇将分析Fragment的生命周期。Fragment拥有自己的生命周期,可以接收、处理用户的事件。但是Fragment不能独立存在,必须依存于Activity,而且Fragment 的生命周期直接受activity的影响。
Fragment的生命周期在流程上和Activity是非常相似的,只是比Activity多了几个生命周期。下图,是两者生命周期的对照图。
这里写图片描述
流程:
onAttach(Activity activity)
fragment和activity建立联系,只调用一次
onCreate(Bundle savedInstanceState)
系统创建fragment的时候调用,可以用于读取保存的状态值,获取或者初始化一些数据,但是不能执行耗时的任务,否则会影响页面的显示
onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
创建 Fra gment 中显示的 view, 其中 inflater 用来装载布局文件, container 表示 标签的父标签对应的 ViewGroup 对象, savedInstanceState 可以获取 Fragment 保存的状态
onViewCreated(View view, Bundle savedInstanceState)
表示窗口已经初始化完毕,此时可以调用控件了
onStart()
和activity一致 启动, Fragement 启动时回调, 此时Fragement可见;
onResume()
和activity一致 在activity中运行是可见的, Fragement 进入前台, 可与用户交互;
onPause()
和activity一致 其他的activity获得焦点,仍然可见
onStop()
和activity一致,fragment不可见的,将从屏幕上消失
onDestroyView()
Fragment中的布局被移除时调用。表示fragemnt销毁相关联的UI布局
清除所有跟视图相关的资源
onDestroy()
销毁fragment对象,跟activity类似。
onDetach()
Fragment和Activity解除关联 脱离Activity的时候调用,是Fragment 生命周期的最后一个方法,执行完后将不再与 Activity 关联,将释放所有 fragment 对象和资源

实例

构建两个简单Fragment,FragmentA和FragmentB,并打印Fragment的每个生命周期。

情况一:采用Replace方法切换Fragment

启动FragmentA
这里写图片描述

A切换B
这里写图片描述
可以看到,FragmentA调用顺序为onPause, onStop, onDestroyView, onDestroy, onDetach。也就是说,FragmentA已经被销毁。A切换到B,就是结束A,创建B的过程。
B切换A
这里写图片描述
流程和A切换B是一致
锁屏
这里写图片描述
此时,只有FragmentA是存活的,FragmentB已经被销毁
这里写图片描述
销毁FragmentA
这里写图片描述

情况二:采用show/hide方法切换Fragment

启动A
和”情况一”一致
A切换B(第一次)
这里写图片描述
可以看到,FragmentA的生命周期方法并没有被调用,这也就说明从FragmentA切换FragmentB时,FragmentA的生命周期并没有发生变化。而FragmentB的生命周期与启动Fragment的生命周期是一样的,所以,此时A切换B,A的生命周期没有发生变化,B被启动。
在A,B都被启动后,在两者之间切换,两者的生命周期都不会再改变。

当调用hide隐藏Fragment时,Fragment的生命周期不会发生变化,这时如果你想做一些操作,要怎么处理呢?答案就是:onHiddenChanged方法。当hide一个fragment时,该方法会调用传入参数为true表示该fragment被隐藏了,当fragment调用了show方法后,该方法传入的参数为false。

锁屏
这里写图片描述
可以看得出来,两个Fragment都调用了onPause, onStop。也就是两个Fragment都处于运行状态。
销毁FragmentA
这里写图片描述

情况三:Fragment以静态的方式加载

这是使用Fragment最简单的一种方式,把Fragment当成普通的控件,直接写在Activity的布局文件中。主要步骤:
1、继承Fragment,重写onCreateView决定Fragemnt的布局
2、在Activity中声明此Fragment,就当和普通的View一样
例如:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment
        android:id="@+id/fg_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"    android:name="com.example.lifecycle.fragmentlifecycle.TestFragmentA"
        />
</FrameLayout>

静态加载的Fragment的启动,结束,锁屏的生命周期和情况一基本是一致的。

项目下载地址

http://download.csdn.net/detail/nimo_na/9580554

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值