我的启动器活动由于某些要求,设置了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>
我所面临的问题是:如果我打开另一个活动 -> 按下主页键 -> 在启动器应用程序中单击应用程序图标 -> 它会打开地图活动而不是之前打开的活动。
但是,如果我通过最近使用菜单导航到应用程序,则新打开的活动会保持在顶部。
请问有人能解释一下关于后退堆栈(backstack)正在发生什么,并且为什么 ActivityManagerService 没有考虑到应用程序进程已经存在并决定启动启动器应用程序并清除后退堆栈,而不是简单地将应用程序置于最前面?
可以在此处创建的小示例应用程序中观察到此问题 - https://github.com/abhiank/SingleTaskActivity
taskAffinity
。这就是为什么 URL 共享活动不会影响主要后退堆栈的原因。我也很想在主要后退堆栈上使用 taskAffinity,但问题在于我无法在意图中设置自定义 taskAffinity 以从 URL 活动打开主要活动。 - vepzfe