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 次 |
| 最近记录: |