1. standard模式
活动的默认模式,在不进行显式指定的情况下,都会自动使用这种启动模式
方式:系统不在乎这个活动时候已经在返回栈中存在过,每启动一次,都创建一个新的实例,入栈到栈顶
2. singleTop模式
方式:当启动该活动的时候,发现该活动已经处于栈顶的话,便可以直接使用它,而不是创建新的实例;但是如果那个时候,该活动并非处于栈顶,还是会创建新的实例的
指定方法:
在AndroidManifest.xml文件中,修改该活动的注册代码:
<activity
……
android:launchMode = "singleTop"
>
<intent-filter>
……
</intent-filter>
</activity>
可见我们通过下面这一行代码指定了启动模式
android:launchMode = "singleTop"
3. singleTask模式
方式:每次启动该活动时候,系统会在返回栈中检查是否存在该活动的实例;如果发现已经存在该活动的实例,就直接使用该实例,并且把在这之上的所有活动通通出栈;如果没有发现该活动的实例,则会创建一个新的实例
指定方法:
在AndroidManifest.xml文件中,修改该活动的注册代码:
<activity
……
android:launchMode = "singleTask"
>
<intent-filter>
……
</intent-filter>
</activity>
可见我们通过下面这一行代码指定了启动模式
android:launchMode = "singleTask"
4. singleInstance模式
我们知道,一个应用程序都有自己的返回栈来管理应用程序内的活动,所有在这个程序内的活动启动销毁都会在这个返回栈中入栈出栈。但是,如果启动模式指定为了singleInstance的话,启动该活动便不会在应用程序的返回栈中入栈,而是开启了一个新的栈,来管理模式为singleInstance的活动。
这样做的意义是什么呢?假设有外部其他程序需要调用我们这个活动,假定为活动A,而其他程序又无法访问我们这个程序的返回栈,因为每个程序都有自己的返回栈。这时候就需要singleInstance模式开辟的新栈,来使得活动得以共享
指定方法:
在AndroidManifest.xml文件中,修改该活动的注册代码:
<activity
……
android:launchMode = "singleInstance"
>
<intent-filter>
……
</intent-filter>
</activity>
可见我们通过下面这一行代码指定了启动模式
android:launchMode = "singleInstance"
查看本活动的编号:this.toString( )
查看本活动所处的栈的编号:getTaskId( )