【发布时间】:2020-07-21 20:54:06
【问题描述】:
由于某些要求,我的启动器活动将 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 而不是之前打开的活动。
但是,如果我通过最近菜单导航到应用程序,则不会发生这种情况。然后新打开的活动保持在顶部。
有人能解释一下这里发生的关于后台堆栈的情况吗?为什么 ActivityManagerService 没有考虑到应用程序进程已经存在,却决定启动启动器应用程序并清除后台堆栈,而不是简单地将应用程序向前推进?
可以在此处创建的一个小示例应用程序中观察到此问题 - https://github.com/abhiank/SingleTaskActivity
【问题讨论】:
-
你试过This thread..的任何解决方案吗?
-
@ADM。太感谢了。尽管进行了所有搜索,我都不敢相信我没有找到这个线程。所以,最终的解决方案是有一个辅助活动来启动主要活动,因为 singleTask 只是简单地杀死它上面的所有其他活动。
-
是的,这让我想到这是一个明显的问题,以前应该问过。所以我挖了一点。如果您有解决方案,请添加答案并接受以关闭 Bounty。
-
是的。我想我应该挖得更深。好吧,这并不是真正的解决方案。只是一个hacky的解决方法。我认为最好是我们将此线程标记为重复并引用该线程。
-
一般来说,使用特殊的
launchMode会导致比它解决的问题更多。请说明您认为需要这种特殊启动模式的原因。
标签: android android-launcher launchmode activity-manager