【问题标题】:startActivityForResult sometimes cause main Activity finish and removed from the activities stackstartActivityForResult 有时会导致主 Activity 完成并从 Activity 堆栈中删除
【发布时间】:2018-04-04 07:44:57
【问题描述】:

我有一个主app A,使用startActivityForResult 启动app B

一切正常,但最近有时app A 已完成并从活动堆栈中删除(没有任何错误提示)。

App B 仍然运行良好,没有任何问题。

检查活动堆栈后,app A 消失了,app B 仍然存在(adb shell dumpsys activity 命令)。

有人知道如何解决这个问题吗?

【问题讨论】:

  • 你是什么意思?更详细一点?
  • 嗨,你能提供一个verifiable example你的问题吗?
  • 在startActivityForResult()之后调用finish()方法
  • @ZarNiMyoSettWin 我制作了一个类似启动器的桌面应用程序 A,当用户单击我桌面上的另一个应用程序图标(B)时,它会创建一个意图,然后使用 startActivifyForResult 打开 B。所以活动堆栈将是 [peek]B->A[Bottom]。在每个应用程序B(由unity制作)中,它都有一个按钮调用关闭,并会调用Application.Quit()方法关闭应用程序,然后A会再次恢复(不刷新)。它适用于大多数 B,但在某些情况下,A 会再次重新启动。所以它破坏了一些东西。
  • @Mohammadnabil 不,我不会完成 A,我需要它在后台运行。

标签: java android android-activity startactivityforresult


【解决方案1】:

onDestroy() Activity 方法的documentation 中。据说:

在销毁活动之前执行任何最终清理。这可能是因为 Activity 正在完成(有人在其上调用了 finish(),或者因为系统正在临时销毁该 Activity 实例以节省空间。您可以使用 isFinishing() 方法区分这两种情况。

如果系统认为它需要更多位置,它可以自行选择终止您的活动 A。这就是附加在你身上的东西。

正如文档中所说,您可以通过覆盖OnDestroy() 方法来避免它,并使用isFinnishing() 检查它是通过用户调用还是通过系统调用完成的。然后,您可以例如调用super.onDestroy(),前提是它是用户销毁而不是系统销毁。请注意,这意味着系统永远无法自行终止您的活动,因此您必须确保调用finnish()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 2012-06-11
    相关资源
    最近更新 更多