理解Android Activity

每一个Activity都表示一个屏幕,应用程序会把它呈现给用户。应用程序越复杂,需要的屏幕可能越多。

典型情况下,这至少包括一个用来处理应用程序的主ui功能的主屏幕。这个主界面由许多fragment组成,并且通常由一组次要Activity支持。要在屏幕之间进行切换,就要启动一个新的Activity。

Activity的生存周期

1.activity栈

每一个Activity的状态是由它所在Activity栈中所处的位置所决定的,Activity栈是当前所有正在运行的Activity的后进先出的集合。当一个新的Activity启动时,它就变为Activity状态了,并被移动到栈顶。如果用户使用Back(返回)按钮返回到了刚才的Activity,或者前台Activity被关闭了,那么栈中的下一个Activity就会移动到栈顶,变为活动状态。

2.Activity的状态

随着Activity的创建和销毁,它们会按照上图从栈中进进出出。在这个过程中,它们经历了一下4中状态:

  • 活动状态
    当一个Activity位于栈顶的时候,它是可见的,具有焦点的前台Activity,这时候它可以接收用户输入。Android将会不惜一切代价来保持它处于活动状态,并根据需要来销毁栈下面部分的Activity,以保证这个Activity拥有它所需要的资源。当另一个Activity变为活动状态的时候,这个Activity就被暂停。

  • 暂停状态
    在某些情况下,Activity是可见的,但是没有获得焦点,此时它就处于暂停状态。当一个透明的或者非全屏的Activity位于该Activity之前时,就会达到这个状态。当Activity被暂停的时候,它任然会被当做近视与活动状态的状态,但是它不能接受用户的输入事件。在极端情况下,Android会终止暂停的Activity,以方便为活动状态的Activity释放资源。当一个Activity变得完全不可见的时候,它就变为停止状态。

  • 停止状态
    当一个Activity不可见的时候,它就处于停止状态。此时,Activity仍然会停留在内存中,保存所有的状态信息,然而当系统的其他地方要求使用内存的时候,他们就会成为被终止的首要侯选对象。在一个Activity停止的时候,保存数据和当前的UI状态以及停止任何飞关键操作是很重要的。一旦一个Activity被退出或者关闭,它就会变为非活动状态。

  • 非活动状态
    当一个Activity被终止后,在启动之前它就处于非活动状态。处于非活动状态的Activity已经从Activity栈中删除了,因此,在他们可以被显示和使用之前,需要重新被启动。

3.理解Activity的生命周期

  • 完整生命周期

Activity的完整生成周期是指对OnCreate方法的第一次调用和对OnDestroy方法的最后一次调用之间的时间范围。有时候还会发生一个Activity的进程被终止,却没有调用OoDestory方法的情况。

OnCreate方法来初始化Activity:填充用户界面,得到对Fragment的引用,分配对类变量的引用,将数据绑定到控件,并启动Service和定时器。

OnDestory方法来清理OnCreate方法创建的所有资源,并保证所有的外部连接都被关闭了。

  • 可见生存期

一个Activity的可见生成期是指调用Onstart和Onstop之间的那段时间。在这个时间段中,Activity是对用户可见的,但是他们可能不具有焦点,或者她可能被部分遮挡了。

OnStop方法应该用来暂停或者停止动画,线程,传感器监听器,GPS查找,定时器,Service或者其他专门用于更新用户界面的进程。当UI不可见的时候它是没有意义的,因为这消耗了资源缺没起到实际的作用。

当UI再次可见的时候,可以使用OnStart或者OnRestart方法来恢复或者重启这些进程。OnRestart在除了对Onstart方法的第一次调用之外的所有方法之前被立即调用。

  • 活动生存期

活动生存期是指OnResume及对应的OnPause之间的那段时间。

一个处于活动状态的Activity是在前台的,并且正在接受用户输入事件。一定要让OnPause和OnResume中的代码执行迅速,并且其中的代码尽可能的少,以保证在前台和后台之间进行切换的时候应用程序能够迅速响应。