Fragment生命周期的详细说明

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 实例化要添加的 Fragment
        MyFragment myFragment = new MyFragment();

        // 获取 FragmentManager
        FragmentManager fragmentManager = getSupportFragmentManager();

        // 开启一个 FragmentTransaction
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

        // 添加 Fragment 到 Activity
        fragmentTransaction.add(R.id.fragment_container, myFragment);

        // 提交事务
        fragmentTransaction.commit();
    }
}

上面就是Fragment的用法,它有自己的生命周期。它的生命周期还是挺多的一共是11个方法,下面我将列举它的生命周期:

1.onAttach

我们先看看这个方法的源码和注释:

根据注释的说明,fragment第一次绑定context的时候调用,也就是绑定Activity。第一次绑定是什么意思呢?

也就是我们第一次通过Transaction.add、commit方法绑定到Activity。

2.onCreate

当onAttach绑定后,fragment将会创建,onCreate方法将会执行。

在这里我们可能要做一下区分,这里的创建和new Fragment有什么区别?

new Fragment()只是创建了对象并没有添加到Activity中,没有触发生命周期。没有任何意义。

而onCreate()创建是指添加到Activity中后做的一些列初始化,这个才是实际意义的创建,属于生命周期。下面是onCreate方法的代码和注释

从注释我们就可以看出这个方法时初始化fragment,是在onAttach之后执行,在onCreateView之前执行

3.onCreateView

当执行完onCreate创建工作后就会创建Fragment的视图,这需要开发者自己去重写这个方法,设置布局文件等属性。下面是onCreateView方法的源码和注释:

这个注释的意思主要是说明这个方法,要实例化用户视图并返回。

4.onActivityCreate

这个方法的意思是Activity的OnCreate()方法是否执行完毕,只有Activity方法的onCreate已经执行才会回调该方法。如果原先已经执行就立即调用该生命周期onActivityCreate()

下面是onActivityCreate方法的源码,从注释上可以看出,这个方法是activity创建后并且fragment视图实例化后才执行的。

5.onStart

这个方法表示启动fragment,当执行到这个生命周期时,已经表明fragment已经可见,表示已经在页面显示,但是还不能进行操作。从下面的注释可以看出,fragment可见的时候就会回调

6.onResume

当执行到这个方法时,表明页面可见并且可交互,也可获取焦点。

7.onPause

当用户要离开这个fragment时先停止交互,但这时页面还是可见的。在此方法中,通常会保存用户输入或执行暂停的操作。

8.onStop

执行完onPause后紧接着就会执行onStop,执行到这里时就表示fragment不可见。在此方法中,通常会释放资源或保存持久化数据。

9.onDestroyView

当fragment的视图被移除时调用,也就是新的fragment已经启动也就是onStart时,这个方法就会执行

10.onDestroy

当执行完onDestroyView后紧接着就会执行onDestroy方法。在此方法中,通常会释放资源或执行清理操作。

11.onDetach

当Fragment与Activity的关联被取消时调用。在此方法中,fragment失去了对Activity的引用。

当调用完onDestroy就会紧接着调用onDetach。

下面我们讲解一下FragmentA跳转到FragmentB生命周期的变化

当我们打开FragmentA时,它的生命周期如下:

当我们从FragmentA跳转到FragmentB时,它们的生命周期如下:

从日志我们可以分析出,当FragmentA跳转到FragmentB时:

(1)FragmentA先执行onPause停止交互,但是页面还是可见;紧接着执行onStop,这时候才不可见;但是FragmentA还没有被销毁;

(2)当前一个页面不可见时,FragmentB开始初始化onAttach、onCreate、onCreateView、onActivityCreated、onStart;表明了Fragment已经启动并可见但不可交互,这时候才会去销毁上一个页面。

(3)当FragmentB start启动后,紧接着FragmentA被销毁,然后执行onDestroyView、onDestroy、onDetach

(4)上一个页面被销毁后FragmentB才会可交互。

上面就是对Fragment生命周期的讲解,关注微信公众号,即可详细了解Android最新知识

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值