0


Android Fragment 生命周期

Fragment的概念:

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

Fragment的生命周期:

onAttach()

    当Fragment与Activity建立关联的时候调用,Activity作为参数传入。

onCreate()

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

onCreateView()

    创建Fragment的UI.

    这个方法必须返回一个View。

    表示这个Fragment的根布局。

onActivityCreated()

    当Activity的onCreate()方法返回时调用。

onStart()

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

onResume()

    当Fragment可见且可交互时调用。

onPause()

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

onStop()

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

onDestroyView()

    当Fragment的UI被删除的时候调用。

onDestory()

    当Fragment销毁时调用

onDetach()

    当Fragment与Activity取消关联的时候调用。

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

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

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

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

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

Activity 与 Fragment 生命周期对比:

Fragment 懒加载:

    自定义一个 LazyLoadFragment 基类,利用 setUserVisibleHint 和 生命周期方法,通过对 Fragment状态判断,进行数据加载,并将数据加载的接口提供开放出去,供子类使用。然后在子类 Fragment 中实现 requestData 方法即可。这里添加了一个 isDataLoaded 变量,目的是避免重复加载数据。考虑到有时候需要刷新数据的问题,便提供了一个用于强制刷新的参数判断。
public abstract class LazyLoadFragment extends BaseFragment
{protected boolean isViewInitiated;
protected boolean isDataLoaded;
@Override
public void onCreate(Bundle savedInstanceState)
{super.onCreate(savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{super.onActivityCreated(savedInstanceState);
isViewInitiated = true;
prepareRequestData();
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser)
{super.setUserVisibleHint(isVisibleToUser);
prepareRequestData();
}
public abstract void requestData();
public boolean prepareRequestData() {
return
prepareRequestData(false);
}
public boolean prepareRequestData(boolean forceUpdate) {
if (getUserVisibleHint() && isViewInitiated && (!isDataLoaded ||
forceUpdate)) {
requestData();
isDataLoaded = true;
return true;
}
return false;
}
}

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 生命周期”的评论:

还没有评论