# Activity生命周期
TIP
首先掌握:
一.如何在一个程序当中定义多个Activity;
二.启动一个Activity的方法;
三.Android当中的back stack;
再去理解:
四.Activity生命周期;
最后再去理解:
五.Activity对象的状态;
六.成对出现的生命周期函数;
# 一.如何在一个程序当中定义多个Activity;
1.定义一个类,继承Activity;
2.在该类当中,复写Activity的onCreate方法;
3.在AndroidManifest.xml文件中注册该Activity;
# 二.启动一个Activity的方法;
1.生成一个Intent对象;(实际上Intent封装了你想做什么这件事;)
2.调用setClass方法
设置所要启动的Activity;
(第一个参数是Context对象,Context是一个类,Activity是它的子类,该对象代表当前的Activity对象。第二个参数是Class对象,代表要启动的Activity类的Class对象)
3.调用startActivity方法启动Activity;
# 三.Android当中的back stack;
每当一个Activity对象新显示出来的时候,这个Activity对象就被压入到后退栈中,
当用户点击后退按钮的时候(按照后进先出的顺序),这个栈顶端的Activity就会被弹出来并且会被销毁。
# 四.Activity生命周期;
Activity的生命周期就是指:一个Activity对象从创建出来到销毁,中间经历过哪些阶段,每个阶段做了哪些事情。如下显示:
生命周期函数 | 调用时机 |
---|---|
onCreate | 在Activity对象被第一次创建时调用 |
onStart | 在Activity变得可见时调用该函数 |
onResume | 在Activity开始准备与用户交互时调用该方法 |
onPause | 当系统即将启动另外一个Activity之前调用 |
onStop | 当前Activity变得不可见时调用该方法 |
onDestroy | 当前Activity被销毁之前调用该方法 |
onRestart | 当一个Activity再次启动之前调用该方法 |
# 五.Activity对象的状态;
根据Android官方说明文档的描述:Activity对象被分为三种状态:
1.Resumed:Activity对象处于正常的运行状态;
2.Paused:可以理解为“暂停状态”,另一个Activity位于前端,但是本Activity还可见,那么本Activity就是处于暂停状态;
典型的例子:就是另一个Activity以对话框的形式出现,它并没有完全覆盖住屏幕,后面那个Activity还是可见的。
3.Stopped:另一个Activity位于前端,完全遮挡本Activity;
需要注意的是:Paused与Stopped这两种状态下:虽然当前可见的Activity已近覆盖或完全覆盖掉后面的Activity,但这并不意味着后面的那个Activity就会释放掉所占有的资源、内存,释放资源这个操作要靠你自己来完成。这也就需要下面所提到的成堆的生命周期函数。
# 六.成对出现的生命周期函数;
这是Android官方文档所提供的Activity生命周期的描述。
由图可知:Activity启动的时候先执行onCreate()
、onStart()
、onResume()
方法,然后进入运行状态,也就是我们所说的Resumed的状态,
然后如果另外一个Activity启动的时候,就会执行onPause()
方法,这时候该Activity处于暂停的状态,也就是我们所说的Paused的状态,这个时候如果启动的那个Activity把我们当前的这个Activity遮挡住了,那么就会执行当前这个Activity的onStop()
方法,那么当前这个Activity进入到停止状态。
如果要销毁这个Activity就先执行onDestory()
方法然后再销毁。这就是我们所说的生命周期。
但是我们为什么说“成对出现的生命周期函数”呢?,从图中不难看出:
1.如果当前的这个Activity执行完onPause()
方法处于暂停状态后,如果想重新进入到运行状态,则需直接去调用执行onResume()
方法;
2.如果当前的这个Activity进入的是停止状态,也就是onStop()
方法执行完了以后,若想再回到运行状态,它会在执行完onRestart()
方法后再去执行onStart()
方法。
结合以上两点,从这个角度我们可以看出:
onPause()
和onResume()
是一对;
onStop()
和onStart()
是一对;
那同理:onCreate()
和onDestory()
是一对。
在理解这些以后,我们可以根据应用程序的需要在不同的生命周期函数中写不同的代码。