Activity的生命周期
一. 返回栈介绍
在Android中,一个应用可能包含了多个Activity,这些Activity是可以层叠的,当启动一个新的活动,这个新活动会覆盖在原活动之上,然后我们点击Back键或者调用finish()
方法会摧毁最上面的活动,下面的一个活动就会重新显示出来。
可以看出这和栈很相似,没错这就是栈。栈是一种后进先出的数据结构,在安卓中我们称之为返回栈(Back Stack),在默认情况下,当我们启动一个新的活动,它会在返回栈中入栈,并出去栈顶的位置。当我们点击Back键或者调用用finish()
方法会摧毁一个Activity时,栈顶的活动就会出栈,此时前一个入栈的活动就会处于栈顶的位置,再次呈现给了用户。
二. 四种活动状态
- 运行状态:活动处于返回栈栈顶时,这是活动处于运行状态。
- 暂停状态:当一个活动不再处于栈顶的位置,但仍然可见时,这个活动就进入了暂停状态。并不是所有的活动都会占满整个屏幕,比如一个对话框活动只会占用屏幕中间及部分区域,此时处于对话框下面的的活动处于暂停状态,处于暂停状态的活动依然完全存活着。
- 停止状态:当一个活动不再处于栈顶位置,并且完全不可见的时候,该活动就进入了停止状态
- 摧毁状态:当一个活动从返回栈栈顶移除后该活动就处于销毁状态。
三. Activity生命周期的7个回调方法
onCreate()
: 在活动第一次被创建的时候调用,完成活动的初始化。onStart()
: 这个方法在活动由不可见变为可见的时候调用。onResume()
: 这个方法在活动准备好喝用户进行交互的时候调用。此时活动一定处于栈顶。onPause()
: 这个方法在系统准备去启动或者恢复另一个活动的时候多用,通常会在改方法中释放掉一些消耗CPU的资源,以及保存一些关键数据。onStop()
: 这个方法在活动完全不可见的时候调用。onDestroy()
: 这个方法在活动被销毁之前调用。onRestart()
: 这个活动由停止状态变为运行状态之前调用。
下面是一张完整的活动生命周期示意图:
- 完整生存期:
onCreate()
->onDestroy()
方法之间所经历的,就是整个完整生存期。在onCreate()
中完成各种初始化操作,onDestroy()
方法中完成释放内存的操作。 - 可见生存期:
onStart()
->onStop()
方法之间所经历的,就是可见生存期。onStart()
方法中对资源进行加载,而在onStop()
中对资源进行释放。 - 前台生存期:
onResume()
->onPause()
方法之间所经历的,就是前台生存期。此时活动总是处于运行状态,。
四. 生命周期活动Demo
1. MainAcitvity代码:
1 | package com.example.lifecycledemo; |
2. AndroidManifest.xml代码:
1 | <?xml version="1.0" encoding="utf-8"?> |
3. 输出结果
- 红色部分:启动App,MainActivity处于栈顶位置,对用户可见。
- 紫色部分:点击跳转到一个一般的活动,这时候一般活动会完全覆盖住MainActivity,处于栈顶位置,此时MainActivity处于停止状态。
- 蓝色部分:按下返回键(Back),从NormalActivity跳转回MainActivity,此时摧毁NormalActivity,使MainActivity重新处于栈顶,调用onRestart重新激活MainActivity。
- 绿色部分:点击调转到一个对话的活动,这个时候对话活动只会占据屏幕的一小部分,所以MainActivity并不会处于停止状态,而是处于暂停状态,之后我们点击对话空白处,MainActivity又恢复运行状态,处于栈顶。
- 灰色部分:在MainActivity按下Back键,退出MainActivity,此时会摧毁MainActivity,退出应用程序。
以上是我对安卓生命周期的理解,因为第一次写blog,如有错误的地方欢迎大家指出,在下方评论!