安卓Fragment生命周期

a 夏天 提交于 2020-01-18 09:06:27

Fragment生命周期与Activity相似

Fragment必须依赖于Activity才能运行,所以Activity生命周期调用优先于Fragment,并且Fragment比Activity要轻量很多。

  1. onAttach:Fragment与Activity的建立关联时调用,用于获得Activity传递的值
  2. onCreate:视图创建之前调用
  3. onCreateView:创建Fragment视图时调用
  4. onActivityCreated:视图创建完成之后调用
  5. onStart:界面视图显示状态下调用
  6. onResume:界面视图有焦点的状态下调用
  7. onDestroyView:在Fragment视图被移除时调用
  8. onDestroy : 销毁时调用
  9. onDetach : 当Fragment不再依附于Activity时调用

Fragment启动流程

Fragment创建时调用:
onAttach——>onCreate——>onCreateView——>onActivityCreated——>onStart——>onResume

Fragment不可见时调用:
onPause——>onStop

Fragment销毁时调用:
onPause——>onStop——>onDestroyView——>onDestory——>onDetach

流程图

在这里插入图片描述

开发过程中需要注意,可能会常用到的方法

setUserVisibleHint() 该方法是在onCreateView之前调用,所以该方法不能操作视图。不然回报空指针错误

使用场景:当与ViewPager使用时内部有个提前缓存的机制(默认是提前缓存一页),可以通过该方法做懒加载的处理。因为ViewPager的机制,初始化的过程中会加载前与后两个Fragment,用户还未手动触发第二页时就已经加载了后一个Fragment并进行网络请求渲染数据,完全违背了懒加载机制。所以需要使用该方法,当此Fragment可见时则进行网络请求并实现数据渲染刷新界面。

注意事项:在未使用ViewPager,而是自己通过FragmentTransaction 对Fragment进行add hide show操作,setUserVisibleHint()方法没有被调用。原因是hide()和show()方法调用时Fragment不走任何的生命周期。

   @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            //界面可见
        } else {
            //界面不可见
        }
    }

onHiddenChanged() 用FragmentTransaction来控制fragment的hide和show时,那么这个方法就会被调用。每当你对某个Fragment使用hide或者是show的时候,那么这个Fragment就会自动调用这个方法。
(使用情况:你自己去管理Fragment,而不是用viewpager管理的时候)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!