Android中Activity的四大启动模式实例讲解(2)

默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。

我们的操作结果如下图:

Android中Activity的四大启动模式实例讲解

log图如下(未记录回退log):

Android中Activity的四大启动模式实例讲解

通过分析操作图以及log,得出这种Standard模式是每次都会创建新的Activity对象,当点击返回按钮时,他会将栈顶(当前Activity)消灭,然后跳 到下一层,这种模式可能大多数情况下不是我们需要的,因为对系统性能的消耗过大。

第三步:singleTop模式下的演示实验(设置页面二为singleTop)

在当前任务栈中,判断栈顶是否为当前的Activity,如果是,就直接使用,如果不是,再创建新的Activity放入栈顶。

AndroidMainfest.xml中设置代码如下:

1 <activity android:name=".Main2Activity" 2 android:launchMode="singleTop"> </activity>

我们的操作结果如下图:

Android中Activity的四大启动模式实例讲解

log图如下(未记录回退log):

Android中Activity的四大启动模式实例讲解

分析此启动模式和singleTop在名字上即可看出区别,即singleTop每次只检测当前栈顶的Activity是否是我们需要请求创建的,而 singleTask则会检测栈中全部的Activity对象,从上向下,如果检测到是我们所请求的则会消灭此Activity对象上面的对象,直接把检测到的我们需要的Activity置为栈顶。

第四步:singleTask模式下的演示实验(设置页面二为singleTask)

在当前任务栈中,判断栈里是否存在Activity,如果不存在,创建一个新Activity入栈,如果存在,会把该Activity之上的所有Activity清除出栈,显示当前Activity。

AndroidMainfest.xml中设置代码如下:

1 <activity android:name=".Main2Activity" 2 android:launchMode="singleTask"> </activity>

我们的操作结果如下图:

Android中Activity的四大启动模式实例讲解

log图如下(未记录回退log):

Android中Activity的四大启动模式实例讲解

只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。

第五步:singleInstance模式下的演示实验(设置页面二为singleInstance)

新创建一个任务栈,放入新创建的Activity,该任务栈只允许存在一个Activity实例,如果已存在,那么会切换到该任务栈。

AndroidMainfest.xml中设置代码如下:

1 <activity android:name=".Main2Activity" 2 android:launchMode="singleInstance"> </activity>

我们的操作结果如下图:

Android中Activity的四大启动模式实例讲解

log图如下(未记录回退log):

Android中Activity的四大启动模式实例讲解

浏览器工作原理类似,我们都知道在多个程序中访问浏览器时,如果当前浏览器没有打开,则打开浏览器,否则会在当前打开的浏览器中访问。此模式会节省大量的系统资源,因为他能保证要请求的Activity对象在当前的栈中只存在一个。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/feca4fef650c41045f9ca546e65b8d87.html