安卓开发中activity的生命周期(2)
本篇是对《安卓开发中activity的生命周期(1)》做一些补充,主要介绍 Activity
与 task
的关系。
一、A Task is a stack of activitise
简单的可以理解为当一个Activity运行后会压入栈中,每次展示给用户的都是在栈顶的 Activity,之前运行的 Activity 都被压在了底下,假设有3个 Activity:
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 |
|
大家可能会发现代码有问题,上面代码主要只是体现不同Activity之间切换,不要纠结代码无法执行,相信大家写一个简单的切换应该没问题,如果写不出来,请移步至谷歌/百度
不难看出,上面的3个Activity,One
切换到 Two
,Two
切换到 Three
- 当执行One后,会将 One 压入到 Task 中,此时 Task 中
[One]
- 当切换到Two后,会将Two 压入到Task中,此时 Task 中
[Two, One]
注意顺序,Two在前面 - 当切换到Three后,会将Three 压入到Task中,此时Task中
[Three, Two, One]
此时Task中有3个Activity,当用户按系统的 回退
键时,会先执行 弹栈
(出栈)操作:
- 第一次按回退后,栈中的元素变成
[Two, One]
,此时展示的是栈顶的Activity,即Two - 第一次按回退后,栈中的元素变成了
[One]
,此时展示的是栈顶的Activity,即One
所以,我们可以发现,切换到其他Activity时,之前的Activity并没有被销毁,而是压入到了Task中,问题又来了,那么我们该怎么去销毁Activity呢?
二、销毁Activity
如何销毁一个Activity,其实我们在上一篇 安卓开发中activity的生命周期(1)有介绍过,即我们在Activity中加入:
finish()
就能销毁当前Activity,当Activity被销毁后,在Task中又是如何操作的呢?
首先,我们稍微改一下上面的代码Two.java
1 2 3 4 5 6 7 8 9 10 11 12 |
|
接着,我们重复上面的操作:
- 当执行One后,会将 One 压入到 Task 中,此时 Task 中
[One]
- 当切换到Two后,会将Two 压入到Task中,此时 Task 中
[Two, One]
注意顺序,Two在前面 - 当切换到Three后,会将Three 压入到Task中,注意,由于我们finish()了,Two这个Activity被销毁了,将不会压入Task中,此时的Task
[Three, One]
最后,我们在按回退
按钮试试:
- 第一次按回退后,注意,由于栈中只有
[Three, One]
,当弹出一个后,栈中变成了[One]
,所以你会发现并没有返回Two,而是直接返回到One。