我有一个具有初始活动的应用程序(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作为默认行为吗?
答案 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"