即使另一个活动在顶部,为什么带有 launchMode="singleTask" 的启动器活动总是被推到后台堆栈的顶部?

abh*_*ank 5 android launchmode android-launcher activity-manager

由于某些要求,我的启动器活动的 launchMode 属性设置为 singleTask。

<activity
    android:name=".map.MapsActivity"
    android:launchMode="singleTask"
    android:screenOrientation="portrait"
    android:theme="@style/MapScreenTheme"
    android:windowSoftInputMode="adjustPan">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

我面临的问题是,如果我打开另一个活动 -> 按主页 -> 单击启动器应用程序中的应用程序图标 -> 它会打开 MapActivity 而不是之前打开的活动。

但是,如果我通过最近菜单导航到该应用程序,则不会发生这种情况。然后新打开的活动保持在顶部。

有人可以解释一下这里发生的关于 backstack 的事情,为什么 ActivityManagerService 没有考虑到应用程序进程已经存在,但决定启动启动器应用程序并清除 backstack 而不是简单地将应用程序向前推进?

可以在此处创建的一个小示例应用程序中观察到此问题 - https://github.com/abhiank/SingleTaskActivity

小智 0

当您的主要活动仅由您自己的应用程序中的其他活动启动时,有一些解决方案:

您可以launchMode从清单中的主要活动定义中删除属性。然后传递Intent.FLAG_ACTIVITY_NEW_TASK给打开您的每个意图MainActivity,例如如下所示:

Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

请注意,您自己的Intent.FLAG_ACTIVITY_NEW_TASK应用程序或应用程序launchMode="singleTask"内的行为只能与清单中活动定义的属性结合使用。taskAffinity

我希望它能对你有一点帮助。


归档时间:

查看次数:

1317 次

最近记录:

5 年,8 月 前