活动的启动模式

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( )

你可能感兴趣的:(android,Android)