「这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战」
我们之前分析过Activity的生命周期,现在分析一下Fragment的生命周期,看看和Activity有什么区别
一、什么是Fragment
Fragment可以解释成碎片、片段,它拥有自己的生命周期和行为。比如:有两个Activity页面的话,它们之间跳转涉及到AMS,是跨进程通信,效率低,但是如果使用1个Activity+多个Fragment实现的话,就不需要跨进程通信 主要用来我们可以在一个Activity中用多个Fragment组合来构建多窗格的UI,它有自己的生命周期
一、Fragment的生命周期
首先我们来张两张图,直观的看一下
一次完整的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