3

我们的应用程序有一个启动活动(启动器的主要活动)和许多其他活动。在大多数情况下,当用户将应用程序切换到后台并从启动器恢复时,旧的活动堆栈会恢复,并且该堆栈中的顶部活动会按预期显示。

但是,当 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>

谁知道奇怪的行为?提前致谢!

4

3 回答 3

1

最后我发现这是Android系统的问题。首次在设备上安装时,Activity 历史堆栈中已经讨论过错误?.

我采用了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;
        }
    }
于 2013-08-09T06:46:13.203 回答
0

由于您只想显示一次 Splash Activity,因此您可以在启动 Main Activity 后使用 finish(),这应该可以解决您的问题。

于 2013-06-08T14:06:27.290 回答
0

如果不了解您的应用程序的更多信息,我真的无法说出发生了什么。我会调查:

  • launchMode清单元素:android: launchMode
  • 检查您的活动没有被系统破坏和重新创建:重新创建活动
  • 如果您正在对片段做任何事情并且这些片段是否正确维护状态

对不起,有点猜想!

于 2013-06-08T14:02:07.477 回答