理解android:启动模式

理解android:启动模式,android,android-activity,activity-stack,launchmode,Android,Android Activity,Activity Stack,Launchmode,我对Android中不同的活动启动模式感到困惑。我知道这与活动堆栈有关,这对我来说也不是很清楚。我希望您能用一个简单的用例对每个启动模式进行简短的解释。android:launchMode是一个关于如何启动活动的说明。在Intent对象中有四种带有活动标志(FLAG_activity_*常量)的模式,用于确定调用活动处理Intent时应该发生什么。详情如下: 1) “标准”-默认情况下,系统始终在目标任务中创建活动的新实例,并将意图路由到该实例 2) “singleTop”-表示活动将创建一次并

我对Android中不同的活动启动模式感到困惑。我知道这与活动堆栈有关,这对我来说也不是很清楚。我希望您能用一个简单的用例对每个启动模式进行简短的解释。

android:launchMode是一个关于如何启动活动的说明。在Intent对象中有四种带有活动标志(FLAG_activity_*常量)的模式,用于确定调用活动处理Intent时应该发生什么。详情如下:

1) “标准”-默认情况下,系统始终在目标任务中创建活动的新实例,并将意图路由到该实例

2) “singleTop”-表示活动将创建一次并位于顶部。如果目标任务顶部已存在活动实例,系统将通过调用其onNewIntent()方法将意图路由到该实例,而不是创建活动的新实例

3) “singleTask”-单个任务的独占性意味着没有多个实例。系统在新任务的根目录下创建活动,并将意图路由到该任务。但是,如果活动的实例已经存在,系统将通过调用其onNewIntent()方法将意图路由到现有实例,而不是创建新实例

4) “singleInstance”-没有多个实例,与“singleTask”相同,只是系统不会向包含该实例的任务中启动任何其他活动。活动始终是其任务的唯一成员

默认模式为“标准”

访问了解更多信息


我认为以下是一个很好的起点:
SingleTask and SingleInstance activities can only begin a task. They are always at the 
root of the activity stack. Moreover, the device can hold only one instance of the 
activity at a time — only one such task.
<application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <activity android:name=".Standard">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".SingleTop"
        android:launchMode="singleTop" />

    <activity
        android:name=".SingleTask"
        android:launchMode="singleTask"
        android:taskAffinity="" />

    <activity
        android:name=".SingleInstance"
        android:launchMode="singleInstance" />      <!--//TODO launchMode -->

</application>

<uses-permission android:name="android.permission.GET_TASKS" />