带有launchMode =“ singleTask”的Launcher活动始终会首先启动,即使另一个活动位于后堆栈顶部。这会发生什么?

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

由于某些要求,我的启动器活动的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>

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

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

[有人可以解释一下有关Backstack的情况吗,为什么ActivityManagerService没有考虑到应用程序进程已经存在,而是决定启动启动器应用程序并清除Backstack而不是简单地将应用程序前进?

android android-launcher launchmode activity-manager
2个回答
0
投票

0
投票

对于某些情况,您的主活动将由own应用程序中的其他活动启动[[only:您可以从清单的主要活动定义中删除launchMode属性。只需将Intent.FLAG_ACTIVITY_NEW_TASK传递给每个打开MainActivity的意图,例如这样:

Intent intent = new Intent(this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);

请注意,

own

应用程序中Intent.FLAG_ACTIVITY_NEW_TASKlaunchMode="singleTask"的行为仅与清单中活动定义上的taskAffinity属性一起使用。我希望它将对您有所帮助。
© www.soinside.com 2019 - 2024. All rights reserved.