【问题标题】:After closing activity Android goes back to activity that should no longer b in the stack关闭活动后,Android 将返回到堆栈中不应再出现 b 的活动
【发布时间】:2016-10-28 01:14:38
【问题描述】:

我在堆栈中有活动 A->B,为了启动活动 C,我调用

        Intent starter = new Intent(context, MainActivity.class);
    starter.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
    context.startActivity(starter);

这一切都很好,活动 A 和 B 都调用了 OnDestroy。如果我现在按下硬件“返回”按钮,活动会适当地完成并被隐藏。但是现在的问题是,如果我通过单击硬件最近应用程序按钮通过应用程序返回应用程序,它将返回到 Activity A。Activity 被销毁并且不在堆栈中。在清单中,所有活动都没有设置 android:launchMode,因此它们处于默认状态。

唯一可能的其他相关信息是有一个 Activity X,它是一个启动器 Activity,它是 android:launchMode="singleInstance" 并且它启动了 Activity A,话虽如此,它会被销毁并且它不应该无论如何都在那个活动堆栈中。

【问题讨论】:

  • 阅读您的描述后,我认为这是正确的行为。当堆栈中没有任何内容时,当然会调用 Launcher Activity(即调用 Activity A)。那么能告诉我你期望发生什么吗?
  • 对不起,如果有点混乱,但最后的段落解释了它。 Activity X实际上是启动Activity,是一个singleInstance(没有其他Activity可以在它的任务中启动),它启动ActivityA然后结束。因此,如果再次启动活动 X,但事实并非如此,则会启动活动 A。

标签: android android-intent android-activity android-navigation


【解决方案1】:

在 Activity C 中按下返回按钮时,可能会调用 Activity C 的 onDestroy()。

请插入日志看是否被调用。这是您的活动 A 再次启动的唯一原因。

请参考Android Back button calls ondestroy?

如果这些对你不起作用,请告诉我。

【讨论】:

  • onDestory 正在被调用,但这应该发生在活动堆栈底部的背压上。如果它是堆栈中唯一的活动,它会销毁,当您返回应用程序时,它会再次调用该活动的 onCreate。问题是,按照我之前描述的模式,活动 A 和 B 被破坏了,
  • 不,它会调用 Activity A
  • 为什么是 A?任务已被清除,并通过活动 C 的标志创建了一个新任务。
【解决方案2】:

硬件后退按钮可以被以下代码覆盖:

    @Override
public void onBackPressed() {
   //put Intent to go back here
 }

你可以用上面写的代码覆盖它

【讨论】:

  • 确实如此,但这会阻止此活动真正模块化和独立。如果堆栈上它下面还有另一个活动,它应该只是弹出。我只是很困惑为什么它会返回一个已经被销毁并且之前只是在堆栈上的活动,而不是启动器活动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-22
  • 2011-07-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多