【问题标题】:Understanding android:launchMode了解 android:launchMode
【发布时间】:2014-02-24 06:42:43
【问题描述】:

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

【问题讨论】:

标签: android android-activity activity-stack launchmode


【解决方案1】:

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

  1. "standard" - 默认,系统总是在目标任务中创建一个新的activity实例并将intent路由到它。

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

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

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

默认模式是“标准”。

了解更多

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

【讨论】:

    【解决方案2】:
    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多