Fragment(一)--生命周期

255 阅读2分钟

「这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战

我们之前分析过Activity的生命周期,现在分析一下Fragment的生命周期,看看和Activity有什么区别

一、什么是Fragment

Fragment可以解释成碎片、片段,它拥有自己的生命周期和行为。比如:有两个Activity页面的话,它们之间跳转涉及到AMS,是跨进程通信,效率低,但是如果使用1个Activity+多个Fragment实现的话,就不需要跨进程通信 主要用来我们可以在一个Activity中用多个Fragment组合来构建多窗格的UI,它有自己的生命周期

一、Fragment的生命周期

首先我们来张两张图,直观的看一下

Fragment的生命周期.png

Fragment和Activity生命周期对比.png

一次完整的Fragment需要经历:onAttach->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()->...->onPause()->onStop()->onDestroyView()->onDeatroy()->onDetach()

我们分析一下每个方法所代表的含义:

  • onAttach()

    fragment被加入到activity中时调用

  • onCreate()

    创建Fragment时调用,可以用来初始化资源文件

  • onCreateView()

    Fragment首次绘制界面时会调用

  • onActivityCreated()

    Activity被渲染出来后调用

  • onPause()

    它是离开Fragment的第一个信号,可以在此方法内确认在当前用户会话结束后仍然有效的任何更改

  • onDestroyView()

    Fragment中的布局被移除时调用

  • onDestroy()

    销毁Fragment

  • onDetach() 当Fragment与Activity关联被取消时调用

二、Fragment生命周期的各种状态

  • 创建Fragment onAttach()->onCreate()->onCreateView()->onStart()->onResume()

  • Fragment变为不可见状态(比如:锁屏、返回到Home界面、被Activity完全覆盖等)

    onPause->onSaveInstanceState()->onStop()

  • Fragment由不可见变为可见

    onStart()->onResume()

  • Fragment被回收又重新创建/横竖屏切换

    被回收:onPause()->onSaveInstanceState()->onStop()->onDestroyView()->onDestroy()->onDetached()

    重新创建:onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()->setUserVisibleHint()

二、Fragment的特点

  • Fragment不能独立存在,必须嵌入到activity中,并且Fragment的生命周期受Activity的影响(但是它有自己的生命周期,并能接收输入事件)
  • 一个Activity里可以有多个Fragment,并且一个Fragment可以被多个Activity重用。
  • 用户可以在Activity运行时动态地添加或删除Fragment