了解android:launchMode

时间:2014-02-24 06:42:44

标签: android android-activity activity-stack launchmode

我对Android中的不同活动launchModes感到非常困惑。我知道它与活动堆栈有关,这对我来说也不是那么清楚。我将非常感谢每个launchMode的简短解释和一个简单的用例。

2 个答案:

答案 0 :(得分:3)

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

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

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

3)“singleTask” - 单个任务专用意味着没有多个实例。系统在新任务的根目录下创建活动,并将意图路由到该任务。但是,如果活动的实例已经存在,系统会通过调用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

答案 1 :(得分:0)

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.

More Details

<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" />

Sample Demo