恢复后如何返回同一活动实例?

时间:2011-06-12 16:26:00

标签: android android-activity onresume activity-lifecycle

这个问题有点奇怪,现在试图弄清楚它已经有一天了,我在这里发帖。 我有一个应用程序,其中活动A(主要活动)启动其他活动(B,C或D)。 当活动A启动活动B并按下“主页”按钮时,会出现此问题。

案例1 - 当我按下“主页”按钮后在我的设备(HTC Desire)上以调试模式测试我的应用程序时,我再次单击应用程序图标,它返回到相同的活动(活动B),这是什么是应该做的。这里没有问题。

案例2 - 当我导出签名包,然后在同一设备上安装应用程序时,如果在按下“主页”按钮后单击应用程序图标,则活动A(主要活动)的新实例为在活动B的顶部启动。我知道了这一点,因为当我从该活动中按“返回”时,它返回活动B并再次按“返回”显示活动A.

如果应用程序以与启动时相同的顺序退出,即如果我从活动B按“返回”,然后从活动A(退出)“退回”,则该行为将不复存在。

此后一切正常。 我已经用不同的设置测试了很多次,但我似乎无法弄清楚为什么行为是这样的。

感谢任何帮助。

4 个答案:

答案 0 :(得分:0)

我认为给你的清单中的活动A“单顶”标志应该解决这个问题。

答案 1 :(得分:0)

关于案例1: 从活动A启动您的意图以启动活动B时,添加标记FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET 这将确保当您回家并再次启动应用程序时,将显示活动A.

关于案例2: 我不确定这是怎么发生的。看起来它认为你有两个版本的应用程序,签名的和未签名的应用程序,但它们都保存在同一个任务堆栈中。如果您只想要一个实例,则可能需要考虑对Activity使用singleTask或singleInstance。有关详细信息,请参阅tasks and back stack上的文档。

答案 2 :(得分:0)

我同意Noel关于案例2的可能原因。如果没有任务重新创建或者设置为启动模式阻止活动的多个实例,则有可能从Home启动它不被视为与从Eclipse启动它(假设情况就是这样)。

在我的人才计算器应用程序中,我将整个应用程序设置为allowTaskReparenting = true,以确保其他堆栈中没有任何内容(主要是电子邮件,因为它可以通过电子邮件发送URL)。然后我将我的主要活动设置为launchMode =“singleTask”,因为我只想要一个这样的实例存在,无论是什么启动它或任何意图。

我唯一的其他活动是加载和保存,并且noHistory =“true”以确保它被删除并且永远不会返回。这基本上意味着它只存在于你身上,并且永远不会回归它。

clearTaskOnLaunch =“true”还将确保只有主要活动从主页启动时才会保留在堆栈中,但如果您有其他方式进入您的活动,情况并非总是如此。如果它只是从Home发布然后设置它。

希望一切都有所帮助。

答案 3 :(得分:0)

您是手动启动应用程序还是使用Eclipse或其他IDE启动应用程序?从Intellij IDEA开始时,我遇到了完全相同的问题。然后我停下来手动运行它,行为就像预期的那样。