我对 Android 中不同的活动启动模式感到非常困惑。我知道它与活动堆栈有关,这对我来说也不是很清楚。我希望通过一个简单的用例对每个启动模式进行简短的解释。
2 回答
android:launchMode是如何启动活动的指令 theta。Intent 对象中有四种带有活动标志(FLAG_ACTIVITY_* 常量)的模式,以确定当调用活动来处理意图时应该发生什么。它们如下:
“标准”-默认值,系统总是在目标任务中创建一个新的活动实例并将意图路由到它。
“ singleTop ” - 意味着活动将被创建一次并且将在顶部。如果 Activity 的实例已经存在于目标任务的顶部,系统会通过调用其 onNewIntent() 方法将 Intent 路由到该实例,而不是创建 Activity 的新实例。
“ singleTask ” - 对单个任务独占意味着没有多个实例。系统在新任务的根部创建活动并将意图路由到它。但是,如果活动的一个实例已经存在,系统将通过调用其 onNewIntent() 方法将意图路由到现有实例,而不是创建一个新实例。
“ singleInstance ” - 没有多个实例,与“singleTask”相同,只是系统不会在持有该实例的任务中启动任何其他活动。活动始终是其任务的唯一且唯一的成员。
默认模式是“标准” 。
访问更多
http://www.slideshare.net/JAX_London/android-android-activity-launch-modes-and-tasks-gonalo-silva
http://developer.android.com/guide/topics/manifest/activity-element.html
http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode
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" />