0


Android Fragment 生命周期

Fragment的概念:

  1. Fragments必须放在一个Activity中
  2. Fragments可以接收它自己的事件 ---
  3. 一个Fragment可以放在多个Activity中,一个Activity中也可以放置多个Fragments
  4. Fragments有它自己的生命周期,而且受到它所在的宿主Activity的生命周期的影响

Fragment的生命周期:

onAttach()

  1. FragmentActivity建立关联的时候调用,Activity作为参数传入。

onCreate()

  1. 创建Fragment的时候系统会调用此函数。

onCreateView()

  1. 创建FragmentUI.
  2. 这个方法必须返回一个View
  3. 表示这个Fragment的根布局。

onActivityCreated()

  1. ActivityonCreate()方法返回时调用。

onStart()

  1. Fragment第一次绘制它的UI的时候调用。

onResume()

  1. Fragment可见且可交互时调用。

onPause()

  1. 当用户离开当前Fragment时调用这个方法。
  2. 通常用来保存持久化数据。

onStop()

  1. Fragment不可见时调用。可能情况:activitystoppedfragment被移除,加入到回退栈。一个stoppedfragment任然是活着的,如果长时间不用也会被移除。

onDestroyView()

  1. FragmentUI被删除的时候调用。

onDestory()

  1. Fragment销毁时调用

onDetach()

  1. FragmentActivity取消关联的时候调用。

一个Fragment可以处于3种状态:

  1. 运行状态 1. Fragment在当前运行的Activity中可见。

  2. 暂停状态 1. 另一个Activity在前台,具有焦点,但是Fragment所在的Activity依然可见。

  3. 停止状态 1. Fragment不可见。宿主Activity处于停止状态或者Fragment已经从Activity删除并添加到后台栈中。

    1. Fragment的宿主Activity的生命周期直接影响Fragment的生命周期。因此,Activity的每个生命周期回调函数都会调用对应的Fragment的回调函数。例如,当宿主ActivityonPause()方法被调用的时候,FragmentonPause()方法也会被调用。

Activity 与 Fragment 生命周期对比:

Fragment 懒加载:

  1. 自定义一个 LazyLoadFragment 基类,利用 setUserVisibleHint 生命周期方法,通过对 Fragment状态判断,进行数据加载,并将数据加载的接口提供开放出去,供子类使用。然后在子类 Fragment 中实现 requestData 方法即可。这里添加了一个 isDataLoaded 变量,目的是避免重复加载数据。考虑到有时候需要刷新数据的问题,便提供了一个用于强制刷新的参数判断。
  1. public abstract class LazyLoadFragment extends BaseFragment
  2. {protected boolean isViewInitiated;
  3. protected boolean isDataLoaded;
  4. @Override
  5. public void onCreate(Bundle savedInstanceState)
  6. {super.onCreate(savedInstanceState);
  7. }
  8. @Override
  9. public void onActivityCreated(Bundle savedInstanceState)
  10. {super.onActivityCreated(savedInstanceState);
  11. isViewInitiated = true;
  12. prepareRequestData();
  13. }
  14. @Override
  15. public void setUserVisibleHint(boolean isVisibleToUser)
  16. {super.setUserVisibleHint(isVisibleToUser);
  17. prepareRequestData();
  18. }
  19. public abstract void requestData();
  20. public boolean prepareRequestData() {
  21. return
  22. prepareRequestData(false);
  23. }
  24. public boolean prepareRequestData(boolean forceUpdate) {
  25. if (getUserVisibleHint() && isViewInitiated && (!isDataLoaded ||
  26. forceUpdate)) {
  27. requestData();
  28. isDataLoaded = true;
  29. return true;
  30. }
  31. return false;
  32. }
  33. }

Fragment状态保存:

Fragment状态保存入口:

  1. 1、Activity的状态保存, 在Activity的onSaveInstanceState()里, 调用了FragmentManger的 saveAllState()方法, 其中会对mActive中各个Fragment的实例状态和View状态分别进行保存.
  2. FragmentManager还提供了public方法: saveFragmentInstanceState(), 可以对单Fragment进行状态保存, 这是提供给我们用的。
  3. FragmentManager的moveToState()方法中, 当状态回退到ACTIVITY_CREATED, 会调用saveFragmentViewState()方法, 保存View的状态

Fragment 在 ViewPager 里面的生命周期,滑动 ViewPager 的页面时 Fragment 的生命周期的变化。 Fragment生命周期:

  1. 当fragment被创建的时候,它会经历以下状态: 1. onAttach() 2. onCreate() 3. onCreateView() 4. onActivityCreated()

  2. 当fragment对用户可见的时候,它会经历以下状态:1. onStart() 2. onResume()

  3. 当fragment不可见的时候,它会经历以下状态:1. ​​onPause()2. onStop()

  4. 当fragment被销毁了(或者持有它的activity被销毁了),它会经历以下状态:1. onPause()2. onStop()3. onDestroyView()4. onDetach()

————————————————

版权声明:本文为CSDN博主 CongPong 的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/CongPong/article/details/125891899


本文转载自: https://blog.csdn.net/CongPong/article/details/125919261
版权归原作者 Cong Pong 所有, 如有侵权,请联系我们删除。

“Android Fragment 生命周期”的评论:

还没有评论