11月更文挑战|Android基础-Fragment生命周期

1,157 阅读3分钟

这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战

前言

Fragment表示Activity中行为或用户界面一部分。可以将多个Fragment组合在一个Activity中使用来构建多窗口UI效果,以及多个Activity重复使用一个Fragment。虽然Fragment作为Activity模块化组成部分,但它具备自己的生命周期,可在Activity运行时可以自由添加和移除。不过Fragment必须在Activity中才能使用,其生命周期直接受绑定的Activity生命周期所影响。

生命周期

Fragment生命周期方法和Activity有许多相似之处。相比于Activity生命周期Fragment的生命周期多了几个方法。

onAttach()

onAttachFragmentActivity已经绑定时调用。初始化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还不处于可交互状态。FragmentonStart可以和ActivityonStart理解是相同状态。

onResume

onResumeFragment是可见且可运行调用。同样也能理解和ActivityonResume是一样。

onPause

ActivityonPause意义相同。一般是处于后台的状态。

onDestoryView

Fragment的内容视图销毁时。Fragment即将被结束或保存时的状态。此时会将onCreateView的视图和Fragment分离。如果该Fragment需要恢复显示则会重新创建新视图。该状态是在onStoponDestory之间调用。

onDetach

FragmentActivity解除绑定关系。onDetachFragment生命周期中最后一个回调,Fragment失去绑定关系,视图结构和资源信息被释放。

image.png

  1. 打开界面时 onCreate() -> onCreateView() -> onActivityCreated() -> onStart() -> onResume()
  2. 回到主页 onPause() -> onStop()
  3. 重新打开页面 onStart() -> onResume()
  4. 返回 onPause() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()

上述提到过Fragment其生命周期和受绑定的Activity生命周期有一定的影响。而Fragment生命周期与Activity生命周期也存在一定区别,Fragment其生命周期是由绑定的Activity所调用,而Activity并非如此。因此也说明Fragment生命周期与Activity有关。

  1. 打开界面时 Fragment onCreate() -> Fragment onCreateView() -> Activity onCreate() -> Fragment onActivityCreated() -> ActivityonStart()-> Fragment onStart() ->Activity onResume() ->Fragment onResume()

  2. 回到主页 Fragment onPause() -> Activity onPause() -> Fragment onStop()-> Activity onStop()

  3. 重新打开页面 Activity onReStart() -> Activity onStart() -> Fragment onStart() -> Activity onResume() ->Fragment onResume()

  4. 返回 Fragment onPause() -> Activity onPause() ->Fragment onStop() -> Activity onStop() -> Fragment onDestroyView() -> Fragment onDestroy() -> Fragment onDetach() -> Activity onDestroy()

可以看到生命周期方法回调基本都是先调用Fragment再调用Activity

image.png

参考