Android Activity生命周期以及Fragment生命周期的区别与分析

Android Fragment生命周期图:spa

Activity生命周期图:对象

 

对照图:生命周期

Fragment生命周期分析:进程

1. 当一个fragment被建立的时候,它会经历如下状态.it

  • onAttach()
  • onCreate()
  • onCreateView()
  • onActivityCreated()

2. 当这个fragment对用户可见的时候,它会经历如下状态。后台

  • onStart()
  • onResume()

3. 当这个fragment进入“后台模式”的时候,它会经历如下状态。fragment

  • onPause()
  • onStop()

4. 当这个fragment被销毁了(或者持有它的activity被销毁了),它会经历如下状态。程序

  • onPause()
  • onStop()
  • onDestroyView()
  • onDestroy() // 原本漏掉类这个回调,感谢xiangxue336提出。
  • onDetach()

5. 就像activitie同样,在如下的状态中,可使用Bundle对象保存一个fragment的对象。方法

  • onCreate()
  • onCreateView()
  • onActivityCreated()

6. fragments的大部分状态都和activitie很类似,但fragment有一些新的状态。im

  • onAttached() —— 当fragment被加入到activity时调用(在这个方法中能够得到所在的activity)。
  • onCreateView() —— 当activity要获得fragment的layout时,调用此方法,fragment在其中建立本身的layout(界面)。
  • onActivityCreated() —— 当activity的onCreated()方法返回后调用此方法
  • onDestroyView() —— 当fragment中的视图被移除的时候,调用这个方法。
  • onDetach() —— 当fragment和activity分离的时候,调用这个方法。

一旦activity进入resumed状态(也就是running状态),你就能够自由地添加和删除fragment了。所以,只有当activity在resumed状态时,fragment的生命周期才能独立的运转,其它时候是依赖于activity的生命周期变化的。

Activity生命周期分析:

 

上面7个生命周期方法分别在4个阶段按着必定的顺序进行调用,这4个阶段以下:

  1.  开始Activity:在这个阶段依次执行3个生命周期方法:onCreate、onStart和onResume。
  2.  Activity失去焦点:若是在Activity得到焦点的状况下进入其余的Activity或应用程序,这时当前的Activity会失去焦点。在这一阶段,会依次执行onPause和onStop方法。
  3. Activity从新得到焦点:若是Activity从新得到焦点,会依次执行3个生命周期方法:onRestart、onStart和onResume。
  4.  关闭Activity:当Activity被关闭时系统会依次执行3个生命周期方法:onPause、onStop和onDestroy。

若是在这4个阶段执行生命周期方法的过程当中不发生状态的改变,那么系统会按着上面的描述依次执行这4个阶段中的生命周期方法,但若是在执行的过程当中改变了状态,系统会按着更复杂的方式调用生命周期方法。

在执行的过程当中能够改变系统的执行轨迹的生命周期方法是onPause和onStop。若是在执行onPause方法的过程当中Activity从新得到了焦点,而后又失去了焦点。系统将不会再执行onStop方法,而是按着以下的顺序执行相应的生命周期方法:

onPause -> onResume-> onPause

若是在执行onStop方法的过程当中Activity从新得到了焦点,而后又失去了焦点。系统将不会执行onDestroy方法,而是按着以下的顺序执行相应的生命周期方法:

onStop -> onRestart -> onStart -> onResume -> onPause -> onStop

 在图2所示的Activity生命周期里能够看出,系统在终止应用程序进程时会调用onPause、onStop和onDesktroy方法。而onPause方法排在了最前面,也就是说,Activity在失去焦点时就可能被终止进程,而onStop和onDestroy方法可能没有机会执行。所以,应该在onPause方法中保存当前Activity状态,这样才能保证在任什么时候候终止进程时均可以执行保存Activity状态的代码。

相关文章
相关标签/搜索