Fragment的生命周期及详解

先来一副Fragment生命周期的图解:
Fragment的生命周期及详解_第1张图片
Fragment生命周期

OnAttach()

作用:帮助Fragment与Activity进行交互。
Activity传入Fragment:

public void onAttach(Activity activity) {
    super.onAttach(activity);
    titles = ((MainActivity) activity).getTitles();//通过强转成宿主activity,就可以获取到传递过来的数据
}

Fragment把值传递给Activity,可以时候接口回调。
1)在Fragment中定义接口。
2)在Activity中实现接口。
3)在OnAttach中获取Activity实例,然后调用实现了的接口。

两个Fragment通信,通常为两个Fragment都绑定同一个Activity,可以使用Activity作为中介。

onCreate()

系统创建fragment的时候回调他,可以在其中初始化除了view之外的东西,例如实例化一些变量
通常这些变量是当Fragment暂停或停止时需要保存的变量。
如果我们要为Fragment启动一个后台线程,可以考虑将代码放于此处。
参数是:Bundle savedInstance, 用于保存 Fragment 参数, Fragement 也可以 重写 onSaveInstanceState(BundleoutState) 方法, 保存Fragement状态;
可以用于 文件保护
他只调用一次。

onCreateView()

第一次使用的时候 fragment会在这上面画一个layout出来, 为了可以画控件 要返回一个 布局的view,也可以返回null。
当系统用到fragment的时候 fragment就要返回他的view,越快越好 ,所以尽量在这里不要做耗时操作,比如从数据库加载大量数据显示listview,
当然线程还是可以的。
给当前的fragment绘制ui布局,可以使用线程更新UI,说白了就是加载fragment的布局的。
这里一般都先判断是否为null。

if(text==null){
      Bundle args=getArguments();
      text=args.getString("text");
    }
    if (view == null) {
      view = inflater.inflate(R.layout.hello, null);
    }

onActivityCreated()

当Activity中的onCreate方法执行完后调用。
注意了:
从这句官方的话可以看出:当执行onActivityCreated()的时候 activity的
onCreate才刚完成。
所以在onActivityCreated()调用之前 activity的onCreate可能还没有完成,
所以不能再onCreateView()中进行 与activity有交互的UI操作,UI交互操作可以在onActivityCreated()里面进行。
所以呢:这个方法主要是初始化那些你需要你的父Activity或者Fragment的UI已经被完
整初始化才能初始化的元素。
如果在onCreateView里面初始化空间 会慢很多,比如listview等。

onStart()

和activity一致,启动Fragement 启动时回调,,此时Fragement可见。

onResume()

和activity一致 在activity中运行是可见的。激活, Fragement 进入前台, 可获取焦点时激活。

onPause()

和activity一致 其他的activity获得焦点,这个仍然可见
第一次调用的时候,指的是 用户 离开这个fragment(并不是被销毁)
通常用于 用户的提交(可能用户离开后不会回来了)

onStop()

和activity一致, fragment不可见的, 可能情况:activity被stopped了OR fragment被移除但被,加入到回退栈中,一个stopped的fragment仍然是活着的如果长时间不用也会被移除。

onDestroyView()

Fragment中的布局被移除时调用。
表示fragemnt销毁相关联的UI布局, 清除所有跟视图相关的资源。
以前以为这里没什么用处其实 大有文章可做,
相信大家都用过ViewPager+Fragment,由于ViewPager的缓存机制,每次都会加载3
页。
例如:有四个 fragment 当滑动到第四页的时候 第一页执行onDestroyView(),但没有
执行onDestroy。他依然和activity关联。当在滑动到第一页的时候又执行了
onCreateView()。 生命周期可以自己试一下。
那么问题来了。会出现重复加载view的局面,所以这么做(下面是先人的代码)

@Override
  public void onDestroyView() {
    Log.i("onDestroyView_Fragment");
    if(view!=null){
            ((ViewGroup)view.getParent()).removeView(view);
    }
    super.onDestroyView();
  }

onDestroy()

销毁fragment对象, 跟activity类似了。

onDetach()

Fragment和Activity解除关联的时候调用。 脱离activity。

参考文章
Android的Fragment的生命周期各状态和回调函数使用

你可能感兴趣的:(Fragment的生命周期及详解)