【问题标题】:onDestroy() while "waiting" for onActivityResult()onDestroy() 同时“等待” onActivityResult()
【发布时间】:2012-04-25 15:59:54
【问题描述】:

我有一个包含两个活动的应用程序:“A”和“B”。

“A”使用startActivityForResult() 生成“B”,即它等待“B”。现在,假设“B”在前台。 Android系统可以在不破坏“B”的情况下破坏活动“A”吗? (如果是,那么当“B”完成时,例如在用户输入后,Android 系统必须重新创建活动“A”并再次将其置于前台,我需要记住并将“A”恢复到其早期的 UI 状态。 )

请注意,我不是在谈论进程 kill(这是不同的情况:如果进程被杀死,所有活动都被杀死并且 onDestroy() 不会被调用或不能保证被调用) .问题只是关于在等待子活动结果时是否可以使用 onDestroy()。

【问题讨论】:

    标签: java android ondestroy


    【解决方案1】:

    如果活动 A 在 B 完成时被杀死,则可以保证

    1. 重新创建。
    2. 提供结果。

    换句话说,A 将在用户下次访问/需要它时重新创建,届时将传递任何待处理的结果(从 B 到 A)。

    另外请注意,这就是为什么必须通过带有整数请求代码的单个 Activity 回调而不是任意回调对象来返回结果的原因。

    【讨论】:

    • 谢谢,我也是这么想的,提供 onDestroy 可以发生。所以你说它可能发生在“A”身上。然而,在这种情况下,“A”将重新启动,即我也得到一个 onCreate()(然后,正如文档所说,我在 onResume() 之前得到结果),所以我需要恢复早期的 UI 状态“A “, 正确的?我的意思是,“B”是在“A”的特定子菜单中启动的,因此用户希望“B”结束时“A”的 UI 状态与“B”启动时的状态相同。 (即“A”与“B”启动时在同一个子菜单中。)如果是,我需要在“B”生成之前保持“A”的 UI 状态以及
    • 如果我误解了您的问题,请纠正我,但您似乎在问一个与 startActivityForResult 无关的关于 Activity 生命周期的更一般的问题。您可以保证结果将从 B 传递到 A(无论 A 是否被销毁),但这并不意味着 Activity 的状态被保留。如果onDestroy 已被调用,那么您可能希望在onRestoreInstanceState(或onResume)中重新创建它时恢复其状态,就像您将遇到的任何其他活动一样。
    • 我希望这两点能让它更清楚:1.它与startActivityForResult有关,因为我无法确定它是否设置了额外的约束,即一般 i> “A”可以被销毁,如果它正在等待“B”的结果,也许不是这样。 (即在这种情况下,它可以获得的“最差”是 onStop())。但是,根据您的回答,在这种情况下也可能会破坏“B”。 (当然,如果活动在不同的进程中,显然可以独立销毁,但在我的情况下它们在同一个应用程序/进程中)。
    • 2.我确实坚持并恢复了我的逻辑状态,但不是 UI 状态。我的理念(适合我的应用程序的世界)是应用程序(游戏)总是在主菜单中启动,如果它以 onCreate() 开始,玩家可以从那里恢复游戏。所以我只在 onStart 和 onResume 发生时才恢复 UI 状态,但在这种情况下,UI 状态是在内存中(与我总是坚持的游戏逻辑状态不同)。但是开始活动“B”(不是游戏玩法)是一个例外,即我希望当“B”结束时,“A”总是返回到它在“ B" 已启动。
    • (我为第三个帖子道歉,但我无法编辑我的第二个评论)。对于我的第二条评论,这是更正后的句子:“但是,根据您的回答,在这种情况下也可能会破坏“A””
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    相关资源
    最近更新 更多