Activity四种启动模式(整合)

一、启动模式介绍

启动模式简单地说就是Activity启动时的策略。

启动模式有两种设置方式:

1、在AndroidManifest.xml中的标签android:launchMode属性设置:启动模式有4种,分别为standard、singleTop、singleTask、singleInstance;

2、在代码中设置启动模式:启动一个Activity,需要用到startActivity()方法,其中传递一个Intent,可以使用Intent.setFlags(int flags)来设置新启动的Activity的启动模式,而通过代码设置Activity的启动模式的方式,优先级要高于在AndroidManifest.xml清单文件中的设置。


       Intent.setFlag(int flags)方法传递的一个整形的数据,被Android系统设置为了常量:

  • FLAG_ACTIVITY_NEW_TASK:这个标识会使新启动的Activity独立创建一个Task。
  • FLAG_ACTIVITY_CLEAR_TOP:这个标识会使新启动的Activity检查是否存在于Task中,如果存在则清除其之上的Activity,使它获得焦点,并不重新实例化一个Activity,一般结合FLAG_ACTIVITY_NEW_TASK一起使用。
  • FLAG_ACTIVITY_SINGLE_TOP:等同于在LauncherMode属性设置为singleTop。

讲解启动模式之前,有必要先讲解一下“任务栈”的概念:

每个应用都有一个任务栈,是用来存放Activity的,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序;比如Activity1-->Activity2-->Activity3,则任务栈为:

Activity四种启动模式(整合)_第1张图片

二、启动模式

1、standard:每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈;

Activity四种启动模式(整合)_第2张图片

2、singleTop:如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例;

Activity四种启动模式(整合)_第3张图片

3、singleTask:如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop;

Activity四种启动模式(整合)_第4张图片

4、singleInstance:如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例;

 

 

SingTask的应用:

       可以用来退出整个应用,将主Activity设为SingTask模式,然后在要退出的Activity中转到主Activity,然后重写主Activity的onNewIntent函数,并在函数中加上一句finish。


备注:文中所用图片来自网络,谢谢原作者。

 

你可能感兴趣的:(android)