了解 android:launchMode

问题描述 投票:0回答:3

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

android android-activity activity-stack launchmode
3个回答
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.

更多详情

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

示例演示


0
投票

Android 4 种启动模式:- 1.标准
2.单上衣 3.单一任务 4.单实例

  1. 标准 -> 当转到活动 A 到活动 B 时,每次都会创建新对象,返回时按返回多次。

  2. 单顶 -> 当用户从 Activity A 转到 Activity B,然后再次转到 Activity B 那么新实例不会创建并且 onCreate 方法不会调用。但是 onNewIntent 方法
    打电话。

  3. 单一任务 -> 当用户从活动 A 到活动 B,从活动 B 到活动 C 再次转到活动 B 时,不会创建新实例,也不会调用 onCreate 方法。而是调用onNewIntent方法。当回按活动 B 时,然后转到活动 A。活动 C 从中间删除。

  4. 单实例 -> Activity Stack B 是 A to B to C。启动 B Activity 后, A -> B -> C -> D — 作业 #1 B — 工作#2(在这里,B 将被分配到单独的职责)

如果继续这样添加 E 和 B,堆栈将如下所示:Job #1 — A -> C -> D -> E。 5. 列出项目


0
投票

我是这样记住的

  • 任务 = 包含活动的堆栈
  • 任务关联性=活动推入的任务

#启动模式

  • 标准:如果创建了活动,它将位于顶部[默认]

  • singleTop:如果调用一个活动,那么如果它已经在顶部,则不会创建新的活动,onNewIntent()

  • singleTask -> 无论任务如何,都将是单个实例 如果有一个实例,则使用 onRestart 跳转并恢复已经存在的实例,并销毁其他实例。如果 Activity B (singleTask)、C、D 在 Task2 中,并且(我在这里)Activity A 在 Task1 中,并且如果我打开 Activity B,那么它将打开 Task2 并销毁顶部(C、D)中的所有内容,直到获取 ActivityB

  • 单实例 当使用此活动调用时,将为此单独创建新任务,并且不会将其他活动放入此任务中 onNewIntent() ;如果没有任务关联性,您将看到两个任务,但点击“最近”时无法在它们之间切换;通过任务亲和力,您将看到两个任务,并且可以通过点击最近任务在它们之间切换

  • 每个任务单个实例 当使用此活动调用时,将为此单独创建新任务,并允许其他活动位于此任务中

© www.soinside.com 2019 - 2024. All rights reserved.