启动模式一共有4种,分别是standard、singleTop、singleTask、singleInstance,可以在AndroidManifest.xml中通过给<activity>标签指定android:launchMode属性来选择启动模式。
1、Standard
1.1、 standard是Activity默认的启动模式,对于使用standard模式的Activity,系统不会在乎这个Activity是都已经在返回栈中存在,每次启动都会创建一个该Activity的新实例。
![](https://img.haomeiwen.com/i7899325/a92fc2db23409b81.png)
1.2、standard模式的原理:
![](https://img.haomeiwen.com/i7899325/3d5328b8551621ce.jpg)
2、singleTop
2.1、当Activity的启动模式指定为SingleTop,在启动Activity时如果发现返回栈的栈顶已经是该Activity,则认为可以直接使用它,不会再创建新的Activity实例。
![](https://img.haomeiwen.com/i7899325/a5ea60dd1e58a720.png)
2.2、当FirstActivity并未处于栈顶的位置时,再启动FirstActivity还是会创建新的实例的。(从FirstActivity跳转进入SecondActivity,再从SecondActivity跳转进入FirstActivity便会创建新的FirstActivity实例,代码如下)
![](https://img.haomeiwen.com/i7899325/5861c807aa2b94ac.png)
![](https://img.haomeiwen.com/i7899325/d1b6daee1c239894.png)
2.3、singleTop模式原理:
![](https://img.haomeiwen.com/i7899325/443e6d8753f86c1f.jpg)
3、singleTask
3.1、当Activity的启动模式指定为singleTask,每次启动该Activity时,系统首先会在返回栈中检查是否存在该Activity的实例,如果发现存在,则直接使用该实例,并把在这个Activity之上的所有其他Activity全部出栈,如果没有发现就会创建一个新的Activity实例。(在SecondActivity中启动FirstActivity,会发现返回栈中已经存在一个First Activity,并且是在SecondActivity的下面,于是SecondActivity会从返回栈中出栈,而FirstActivity重新成为了栈顶的Activity,因此FirstActivity的onRestart()方法和SecondActivity的onDestroy()方法会得到执行)
![](https://img.haomeiwen.com/i7899325/09c439d99c9b92b4.png)
![](https://img.haomeiwen.com/i7899325/909bd8b58efbb150.png)
![](https://img.haomeiwen.com/i7899325/571e07db84686ca5.png)
3.2、singleTask模式原理:
![](https://img.haomeiwen.com/i7899325/ecdeb16044a19c20.jpg)
4、singleInstance
4.1、指定为singleInstance模式的Activity会启用一个新的返回栈来管理这个Activity(如果singleTask模式指定了不同的taskAffinity,也会启用一个新的返回栈)。
4.2、适用于程序中有一个Activity是允许其他程序调用的情况下,可以实现跟其他程序共享该Activity的实例。
4.3、在FirstActivity界面点击按钮进入SecondActivity,然后在SecondActivity界面点击按钮进入ThirdActivity。可以从日志中发现,SecondActivity的返回栈地址不同于FirstActivity和ThirdActivity,说明SecondActivity确实存放在一个单独的返回栈里,而这个栈中只有SecondActivity这一个Activity。
![](https://img.haomeiwen.com/i7899325/dbd80231089a4760.png)
![](https://img.haomeiwen.com/i7899325/211aee0376f5bb69.png)
![](https://img.haomeiwen.com/i7899325/f0636cf8b3d9b5b5.png)
![](https://img.haomeiwen.com/i7899325/fb635f63d1921977.png)
4.4、按下Back键进行返回,ThirdActivity直接返回到了FirstActivity,再按下Back键会返回到SecondActivity,再按下Back键才会退出程序。
4.5、singleInstance模式原理:
![](https://img.haomeiwen.com/i7899325/2dda73fe8203ae1d.jpg)
Demo地址:https://gitee.com/aaron222/activitytest.git
网友评论