我对 Android 中不同的活动启动模式感到非常困惑。我知道这与活动堆栈有关,这对我来说也不太清楚。我希望能通过一个简单的用例对每个启动模式进行简短的解释。
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" />
Android 4 种启动模式:-
1.标准
2.单上衣
3.单一任务
4.单实例
标准 -> 当转到活动 A 到活动 B 时,每次都会创建新对象,返回时按返回多次。
单顶 -> 当用户从 Activity A 转到 Activity B,然后再次转到 Activity B
那么新实例不会创建并且 onCreate 方法不会调用。但是 onNewIntent 方法
打电话。
单一任务 -> 当用户从活动 A 到活动 B,从活动 B 到活动 C 再次转到活动 B 时,不会创建新实例,也不会调用 onCreate 方法。而是调用onNewIntent方法。当回按活动 B 时,然后转到活动 A。活动 C 从中间删除。
单实例 -> 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. 列出项目
我是这样记住的
#启动模式
标准:如果创建了活动,它将位于顶部[默认]
singleTop:如果调用一个活动,那么如果它已经在顶部,则不会创建新的活动,onNewIntent()
singleTask -> 无论任务如何,都将是单个实例 如果有一个实例,则使用 onRestart 跳转并恢复已经存在的实例,并销毁其他实例。如果 Activity B (singleTask)、C、D 在 Task2 中,并且(我在这里)Activity A 在 Task1 中,并且如果我打开 Activity B,那么它将打开 Task2 并销毁顶部(C、D)中的所有内容,直到获取 ActivityB
单实例 当使用此活动调用时,将为此单独创建新任务,并且不会将其他活动放入此任务中 onNewIntent() ;如果没有任务关联性,您将看到两个任务,但点击“最近”时无法在它们之间切换;通过任务亲和力,您将看到两个任务,并且可以通过点击最近任务在它们之间切换
每个任务单个实例 当使用此活动调用时,将为此单独创建新任务,并允许其他活动位于此任务中