Home按钮后重新启动应用程序显示初始活动不是最新的

时间:2011-08-01 20:02:10

标签: android android-manifest

我有一个具有初始活动的应用程序(A - 也是启动器中指定的活动),它允许用户启动另一个活动(B)。我正在保存Activity B的状态(onSaveInstanceState()并在onCreate()中恢复它)。

在某些手机(N1和Motrola里程碑,截至目前但不是Galaxy S)推出B后如果用户按下主页按钮(即应用程序转到后台)然后立即重新启动应用程序,它们会显示活动再一次(不是B)。但如果他们从“最近的”应用程序(主页按钮长按)启动它们,它们将被带到活动B。

根据我对Android文档的理解,除非任务已经被杀死(除了从应用程序屏幕重新启动活动之外没有其他任何操作,似乎没有这样做)我们应该看到活动B在启动时恢复(因为它位于堆栈顶部)。所以我似乎无法弄清楚这里到底出了什么问题。

在应用程序使用期间BTW方向更改工作正常(一切保存并恢复正常)。这个奇怪的问题一直困扰着我一段时间,通过反复试验,我发现当我禁用该活动的方向,然后尝试重新启动时B会按预期显示。

所以其他人都面对这样的事情,如果是这样,怎么解决呢?

我正在考虑在SharedPreferences中保存正在运行的活动(如前面提到的in this post)并且他们从活动A中恢复它,但是我想知道我在这里是否遗漏了什么。不应该将B restored on re-launch作为默认行为吗?

6 个答案:

答案 0 :(得分:1)

尝试将此添加到清单文件中的活动:

android:launchMode="singleTask"

这解决了我的应用中的问题....如果我能正确理解您的问题。

答案 1 :(得分:1)

使用android:launchMode =“singleInstance”代替

答案 2 :(得分:0)

在AndroidManifest的活动代码中,只需添加

即可
android:alwaysRetainTaskState="true"

答案 3 :(得分:0)

这是因为当按下图标时,另一个app实例正在启动。

  // To prevent launching another instance of app by clicking app icon 
                if (!isTaskRoot()
                        && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
                        && getIntent().getAction() != null
                        && getIntent().getAction().equals(Intent.ACTION_MAIN)) {

                    finish();
                    return;
                }

在调用setContentView之前在启动器活动中编写上述代码。这将解决问题

答案 4 :(得分:0)

这个答案适用于因类似问题而来自搜索引擎的人。

我有,

Launcher Activity -> A 
Main Activity -> B

在应用程序位于 B 后,按HOME按钮或从任务列表切换后,始终启动 A

最后发现问题出现在清单中,已删除

android:noHistory = "true"

来自清单中 B 的活动声明,并已解决。

答案 5 :(得分:0)

我找到了解决此问题的简单方法

将此行添加到Manifest的活动代码中

android:launchMode="singleInstance"