美文网首页
Activity-Activity的启动模式

Activity-Activity的启动模式

作者: cjjjjjj | 来源:发表于2022-04-12 16:29 被阅读0次

启动模式一共有4种,分别是standard、singleTop、singleTask、singleInstance,可以在AndroidManifest.xml中通过给<activity>标签指定android:launchMode属性来选择启动模式。

1、Standard

1.1、 standard是Activity默认的启动模式,对于使用standard模式的Activity,系统不会在乎这个Activity是都已经在返回栈中存在,每次启动都会创建一个该Activity的新实例。

通过日志查看每次点击出现的FirstActivity实例

1.2、standard模式的原理:

standard模式原理图

2、singleTop

2.1、当Activity的启动模式指定为SingleTop,在启动Activity时如果发现返回栈的栈顶已经是该Activity,则认为可以直接使用它,不会再创建新的Activity实例。

在Manifest.xml中修改启动模式之后点击前面的按钮查看日志

2.2、当FirstActivity并未处于栈顶的位置时,再启动FirstActivity还是会创建新的实例的。(从FirstActivity跳转进入SecondActivity,再从SecondActivity跳转进入FirstActivity便会创建新的FirstActivity实例,代码如下)

修改点击事件跳转到SecondActivity SecondActivity中修改点击事件跳转到FirstActivity

2.3、singleTop模式原理:

singleTop模式原理图

3、singleTask

3.1、当Activity的启动模式指定为singleTask,每次启动该Activity时,系统首先会在返回栈中检查是否存在该Activity的实例,如果发现存在,则直接使用该实例,并把在这个Activity之上的所有其他Activity全部出栈,如果没有发现就会创建一个新的Activity实例。(在SecondActivity中启动FirstActivity,会发现返回栈中已经存在一个First Activity,并且是在SecondActivity的下面,于是SecondActivity会从返回栈中出栈,而FirstActivity重新成为了栈顶的Activity,因此FirstActivity的onRestart()方法和SecondActivity的onDestroy()方法会得到执行)

在Manifest.xml中修改FirstActivity的启动模式为singleTask 在FirstActivity中添加onRestart方法并打印日志 在SecondActivity中添加onDestroy方法并打印日志

3.2、singleTask模式原理:

singleTask模式原理图

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。

将SecondActivity的启动模式设置为singleInstance 打印当前返回栈的id 打印当前返回栈的id,修改按钮点击事件跳转到ThirdActivity 打印当前返回栈的id

4.4、按下Back键进行返回,ThirdActivity直接返回到了FirstActivity,再按下Back键会返回到SecondActivity,再按下Back键才会退出程序。

4.5、singleInstance模式原理:

singleInstance模式原理图

Demo地址:https://gitee.com/aaron222/activitytest.git

相关文章

网友评论

      本文标题:Activity-Activity的启动模式

      本文链接:https://www.haomeiwen.com/subject/xxdysrtx.html