将主 Activity 标记为“singleTask”时,从启动器启动时会销毁其他 Activity

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

将主 Activity 标记为

singleTask
时,从启动器启动时会销毁其他 Activity。但是,当从“最近”启动时,它只会恢复最近打开的活动。为什么会这样呢?我该如何预防呢?

为了说明这一点,(活动 A 标记为

singleTask
),行为如下:

活动 A -> 活动 B -> 从启动器打开应用程序 -> 活动 A

活动 A -> 活动 B -> 从最近打开应用程序 -> 活动 A -> 活动 B

从启动器打开时,我希望有相同的堆栈(A -> B)。

我读了很多 StackOverflow 和 Reddit 帖子,但似乎没有一个完全适用于我的情况和/或正确解释为什么会发生这种情况以及如何解决它。

例如,

这篇文章似乎描述了我的确切问题。但是我不知道提到的解决方案应该如何工作。因为在我的复制品中

onCreate
从未被调用过。此外,Activity B 被破坏。因此,即使我能够在 Activity A 的
finish
方法中调用
onCreate
,我最终也会完成整个应用程序,而不是仅完成 Activity A 的该实例

GitHub 上的复制:https://github.com/tafelnl/android-single-task-launch-reproduction这只是一个具有两个活动的简单应用程序。

MainActivity
被标记为
singleTask
并通过意图启动
SecondActivity
。您可以观察到该行为如上所述。

android android-intent launchmode singletask
1个回答
0
投票

尽量不要在 MainActivity(ACTION_MAIN 和 CATEGORY_LAUNCHER)上使用 singleTask launchMode,以防当用户点击启动器将您的应用程序带到前台时,同一任务关联中的其他 Activity(例如 SecondActivity)被 Android 销毁。

或者,安全地,您可以创建一个启动 Activity 作为条目,而无需任何 UI,无论后续 Activity 上设置了其他不同的启动模式:

<!-- AndroidManifest -->
<activity
    android:name=".SplashActivity"
    android:launchMode="standard">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity
    android:name=".MainActivity"
    android:launchMode="singleTask">
</activity>

// SplashActivity
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    startActivity(Intent(this, MainActivity::class.java))
    finish()
}
© www.soinside.com 2019 - 2024. All rights reserved.