理解 android:launchMode

smi*_*hak 2 android activity-stack launchmode android-activity

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

Jit*_*yay 6

android:launchMode是如何启动 Activity 的指令。Intent 对象中有四种带有活动标志(FLAG_ACTIVITY_* 常量)的模式,用于确定当活动被调用来处理一个意图时应该发生什么。它们如下:

  1. 标准” - 默认值,系统始终在目标任务中创建活动的新实例并将意图路由到它。

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

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

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

默认模式为“标准”。

访问更多

http://www.slideshare.net/JAX_London/android-android-activity-launch-modes-and-tasks-gonalo-silva

http://blog.akquinet.de/2010/02/17/android-activites-and-tasks-series-an-introduction-to-androids-ui-component-model/

http://developer.android.com/guide/topics/manifest/activity-element.html

http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode


Kes*_*era 2

SingleTask and SingleInstance activities can only begin a task. They are always at the \nroot of the activity stack. Moreover, the device can hold only one instance of the \nactivity at a time \xe2\x80\x94 only one such task.\n
Run Code Online (Sandbox Code Playgroud)\n\n

更多细节

\n\n

\n

\n\n
<application\n    android:name=".MyApplication"\n    android:allowBackup="true"\n    android:icon="@mipmap/ic_launcher"\n    android:label="@string/app_name"\n    android:roundIcon="@mipmap/ic_launcher_round"\n    android:supportsRtl="true"\n    android:theme="@style/AppTheme">\n\n    <activity android:name=".Standard">\n        <intent-filter>\n            <action android:name="android.intent.action.MAIN" />\n\n            <category android:name="android.intent.category.LAUNCHER" />\n        </intent-filter>\n    </activity>\n\n    <activity\n        android:name=".SingleTop"\n        android:launchMode="singleTop" />\n\n    <activity\n        android:name=".SingleTask"\n        android:launchMode="singleTask"\n        android:taskAffinity="" />\n\n    <activity\n        android:name=".SingleInstance"\n        android:launchMode="singleInstance" />      <!--//TODO launchMode -->\n\n</application>\n\n<uses-permission android:name="android.permission.GET_TASKS" />\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n

示例演示

\n