四大组件之Activity 第2节 Activity的生命周期

更新时间 修改意见
2016-08-02 陈敏

第2节 Activity的生命周期

每一个Activity都有它的生命周期,体现了它从诞生到消亡的各个阶段。

下图为我们展示了Activity整个生命的过程,这是安卓官方提供的Activity生命周期图。

2.1 生命各个时期的回调

Activity每进入到一个生命的阶段,就会调用这些状态对应的函数。

如果我们在代码中继承了Activity类,并覆盖了这些函数,我们就能感知到Actvity生命状态的转换,并在这个转换的时刻让Activity做对应的处理。

比如在Activity创建的时候,让它调用我们的代码,完成界面的布局;在Activity销毁的时候,让它调用我们的代码,完成各种资源的释放。

2.2 Activity的状态

接下来,我们详细介绍下Activity的各个阶段。这些阶段都是成对出现的。根据不同的标准,我们将它们分成三类:

  1. 全生命周期:这是Activity的从创建到销毁的整个阶段,从onCreate()开始到onDestroy()结束。

  2. 可见生命周期:这是Activity能被用户看到的整个阶段,这里说的能被看到包括了“虽然被显示但是不能与用户交互”的情况,例如你正在微信聊天,突然系统弹出来一个对话框类型的Activity,提示你电量不足,这时微信界面被挡在后面,不能和用户交互了,但是你还能看到。从onStart()开始到onStop()结束。

  3. 前台生命周期:这是Activity可以和用户进行交互的阶段。从onResume()开始到onPause()结束。

2.3 Acivity常见的切换周期

下面我们看看几个经常见到的Activity的周期切换。

2.3.1 完全周期

从一个Activity创建出来,到显示,再到用户按返回键主动退出销毁这个Activity,它将经历:
onCreate()->
onStart()->
onResume()->
用户可以与Activity交互,用户按返回键主动退出->
onPause()->
onStop()->
onDestroy()

2.3.2 Activity启动另一个Activity

Activity A创建出来,并显示;然后Activity A启动另一个Activity B,B创建出来,并显示,它们将经历:
Activity A onCreate()->
Activity A onStart()->
Activity A onResume()->
用户可以与Activity A交互,然后Activity A启动另一个Activity B,
Activity A onPause()->
Activity B onCreate()->
Activity B onStart()->
Activity B onResume()->
Activity A onSaveInstanceState()->
Activity A onStop()->
Activity A被隐藏,用户可以与Activity B交互;

2.3.3 Activity的自动重新创建

在某些情况下,即使用户没有点击“返回”按钮,Activity也会被系统主动回收销毁,例如,

  1. 当Activity被放在后台(OnPause或OnStop状态)没有显示出来的时候,内存紧张,系统就会主动回收这个Activity;

  2. 横竖屏切换时,Activity的界面布局发生变化需要重新载入横屏的界面布局时,就要将当前的Activity销毁,然后再重新创建一个它横屏时的Activity。

因为这是系统“悄悄”销毁的Activity,并没有得到用户的“同意”,所以当用户再次切换到这种Actiity的时候,系统需要制造出一种这个Activity从来没有被回收过的假象,它就需要“悄悄的”再把这个Activity再次创建出来。

这个过程就是Activity的重建。

不论是是因为资源不足触发的重建,还是因为屏幕旋转触发的重建,Activity的生命周期过程都一样。

这里用屏幕旋转,举个例子。如果一个Activity从创建出来,到显示,然后旋转,那么它将经历:
onCreate()->
onStart()->
onResume()->
用户可以与Activity交互,此时屏幕进行旋转,从竖屏变横屏->
onPause()->
onSaveInstanceState()->
onStop()->
onDestroy()->
onCreate()->
onStart()->
onRestoreInstanceState()->
onResume()->
用户可以与Activity交互;

在周期变化的过程当中,加入了onSaveInstanceState()onRestoreInstanceState()。虽然它们不是Activity周期的一部分,但是对它们对回调在Activity的各种切换扮演了非常重要的角色--提供了保存Activity数据的时机。

关于Activity的系统回收,我们将在下一节详细介绍。


/**************************************************************************/
* 版权声明
* 本教程只在CSDN安豆网发布,其他网站出现本教程均属侵权。
/
**************************************************************************/