我们的应用程序具有启动活动(启动器的主要活动)和许多其他活动。在大多数情况下,当用户将应用程序切换到后台并从启动器恢复时,旧活动堆栈将恢复,并且该堆栈中的顶级活动将按预期显示。
然而,当apk刚刚安装在手机上,或者安装了相同应用程序的新apk(具有更高版本)时,其行为很奇怪。当应用程序切换到后台并从启动器恢复时,不会恢复先前的活动堆栈并始终显示启动活动。如果我们从最近的应用程序列表中恢复应用程序,则活动堆栈将按预期恢复。只有在从最近的应用程序列表中删除任务后,一切都恢复正常。之前的活动堆栈将始终正确恢复,直到它再次被另一个apk安装替换。
我的Android版本是4.1.2,我正在使用其默认启动器。
以下是配置启动活动。
<activity android:name=".welcome.activity.SplashActivity" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
谁对这种奇怪的行为有什么看法?提前谢谢!
答案 0 :(得分:1)
最后我发现这是一个Android系统的问题。它已在Activity history stack wrong upon first install on device?中讨论过。
我已采用https://code.google.com/p/android/issues/detail?id=2373#c40中所述的解决方法并且效果很好,即在SplashActivity.onCreate()中添加以下代码:
if (!isTaskRoot()) {
Intent intent = getIntent();
String action = intent.getAction();
if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && action != null && action.equals(Intent.ACTION_MAIN)) {
finish();
return;
}
}
答案 1 :(得分:0)
如果不了解有关您的应用的更多信息,我真的无法告诉您发生了什么。我会调查一下:
launchMode
清单元素:android:launchMode 抱歉,有点猜测!
答案 2 :(得分:0)
由于您只想显示一次Splash Activity,因此您可以在启动Main Activity后使用finish()来解决您的问题。