这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战
前言
Fragment
表示Activity
中行为或用户界面一部分。可以将多个Fragment
组合在一个Activity
中使用来构建多窗口UI效果,以及多个Activity
重复使用一个Fragment
。虽然Fragment
作为Activity
模块化组成部分,但它具备自己的生命周期,可在Activity
运行时可以自由添加和移除。不过Fragment
必须在Activity
中才能使用,其生命周期直接受绑定的Activity
生命周期所影响。
生命周期
Fragment
生命周期方法和Activity
有许多相似之处。相比于Activity
生命周期Fragment
的生命周期多了几个方法。
onAttach()
onAttach
是Fragment
和Activity
已经绑定时调用。初始化Fragment
可以从getArguments
中获取入参。但当Fragment
附加到Activity
之后就无法在调用getArguments
方法了。所以入参信息最好是在Fragment
初始化绑定页面时执行。
onCreate
Fragment
初次创建时调用,此时绑定的Activity
还没有创建完成。在当前状态下是无法获取Activity
相关信息。只有当状态在onActivityCreated
才能获取到Activity
。
onCreateView
onCreateView
返回Fragment
加载的View
内容。
onActivityCreated
当前和Fragment
绑定的Activity
执行了onCreate
。当前状态下Activity
是创建完成了,也就能够获取到Activity。
onStart
在onStart
时,Fragment
是可见状态了。但Fragment
还不处于可交互状态。Fragment
的onStart
可以和Activity
的onStart
理解是相同状态。
onResume
在onResume
时Fragment
是可见且可运行调用。同样也能理解和Activity
的onResume
是一样。
onPause
和Activity
的onPause
意义相同。一般是处于后台的状态。
onDestoryView
Fragment
的内容视图销毁时。Fragment
即将被结束或保存时的状态。此时会将onCreateView
的视图和Fragment
分离。如果该Fragment
需要恢复显示则会重新创建新视图。该状态是在onStop
和onDestory
之间调用。
onDetach
Fragment
和Activity
解除绑定关系。onDetach
是Fragment
生命周期中最后一个回调,Fragment
失去绑定关系,视图结构和资源信息被释放。
- 打开界面时
onCreate()
->onCreateView()
->onActivityCreated()
->onStart()
->onResume()
- 回到主页
onPause()
->onStop()
- 重新打开页面
onStart()
->onResume()
- 返回
onPause()
->onStop()
->onDestroyView()
->onDestroy()
->onDetach()
上述提到过Fragment
其生命周期和受绑定的Activity
生命周期有一定的影响。而Fragment生命周期与Activity生命周期也存在一定区别,Fragment
其生命周期是由绑定的Activity
所调用,而Activity
并非如此。因此也说明Fragment
生命周期与Activity
有关。
-
打开界面时 Fragment
onCreate()
-> FragmentonCreateView()
-> ActivityonCreate()
-> FragmentonActivityCreated()
-> ActivityonStart()
-> FragmentonStart()
->ActivityonResume()
->FragmentonResume()
-
回到主页 Fragment
onPause()
-> ActivityonPause()
-> FragmentonStop()
-> ActivityonStop()
-
重新打开页面 Activity
onReStart()
-> ActivityonStart()
-> FragmentonStart()
-> ActivityonResume()
->FragmentonResume()
-
返回 Fragment
onPause()
-> ActivityonPause()
->FragmentonStop()
-> ActivityonStop()
-> FragmentonDestroyView()
-> FragmentonDestroy()
-> FragmentonDetach()
-> ActivityonDestroy()
可以看到生命周期方法回调基本都是先调用Fragment
再调用Activity
。