活动的生命周期

掌握活动的生命周期对任何开发者来说都很重要,当你深入了解活动的生命周期之后,就可以写出更加连贯流畅的程序(引用于:第一行代码Android

返回栈

Android中的活动是可以层叠的,我们每启动一个新的活动,就会覆盖在原活动之上,然后点击Back键会销毁最上面的活动,下面的一个活动就会重新显示出来。
其实Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称作返回栈(Back Task),栈是一种后进先出的数据结构,在默认情况下,每当我们启动了一个新的活动,他会在返回栈中入栈,并处于栈顶位置,而每当我们按下Back键或者调用finish()方法去销毁一个活动时,处于栈顶的活动就会出栈,这时前一个入栈的活动就会重新处于栈顶的位置,系统总是会显示处于栈顶的活动给用户

活动的状态

每个活动在其生命周期中最多可能会有4中状态
1. 运行状态
当一个活动位于返回栈的顶部时,这个活动就是运行状态
2. 暂停状态
当一个活动不再处于栈顶的时候,但仍然可见,这时活动就进入了暂停状态,比如活动遇到了对话框形式的活动
3. 停止状态
当一个活动不再处于栈顶的时候,并且完全不可见的时候,就进入了停止状态,系统仍然会为这种活动保存相应的状态和成员变量,但这并不是完全可靠的,当其他活动需要内存的时候,会被系统回收
4. 销毁状态
当一个活动从返回栈中移除后就变成了销毁状态

活动的生存期

Activity类中定义了7个回调的方法,覆盖了活动生命周期的每一个环节
1. OnCreate
这个方法是打开活动后第一个执行的事件,当然也是我们必须重写的一个方法,其中它大致负责如下的事情:
创建视窗、初始化变量、将静态变量绑定到列表
OnCreate拥有一个Bundle类型的参数bundle,关于这个我以后会单独讲
2. OnStart
OnStart将在OnCreate后由系统调用,活动由不可见变为可见的时候调用,在该方法完毕之后将执行OnResume方法。
3. OnResume
当活动准备好和用户进行交互的时候调用,一般来说在需要执行某些操作的时候才需要重写该事件。比如:
开始动画、开始监听GPS更新、显示一些相关的提示和对话框、注册广播监听(这个也以后单独讲
4. OnPause
这个方法在系统准备去启动或者恢复另一个活动的时候调用,通常会在这个方法将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执行要快,不然会影响新的活动使用
5. OnStop
当活动完全不可见的时候调用。一般会触发的点2:
当一个新活动打开并覆盖当前活动、一个已存在的活动切换到前台、活动被销毁时
6. OnDestroy
该事件是整个活动生命周期中最后一个,但是很多情况下并不会执行到这个事件,所以很少重写该方法。
7. OnRestart
当用户通过Home按钮将该用户切换到后台,并在之后又打开该应用则会触发该事件。一般也很少重写该方法。
图片来源于网络

三种生存期

  1. 完整生存期
    活动在onCreate()方法和onDestroy()方法之间所经历的,就是完整生存期
  2. 可见生存期
    活动在onStart()方法和onStop()之间所经历的,在可见生命期内,活动对于用户总是可见的,即便有可能无法和用户进行交互。
  3. 前台生存期
    活动在onResume()方法和onPause()方法之间所经历的,这个生存期内,活动总是处于运行状态,此时的活动是可以和用户进行相互的,我们平时看到和接触最多的也是这个状态下的活动。

一只蠢莫