【问题标题】:Child Activity is destroyed on Up Navigation向上导航时子活动被破坏
【发布时间】:2015-06-29 03:05:40
【问题描述】:

我有 3 个活动:A、B 和 C,它们代表 Web 表单的 3 个页面。 A 是 B 的父 Activity,B 是 C 的父 Activity。我已经使用 android:launchMode="singleTop" 正确实现了向上导航。当我有信息是A,信息是B,信息是C,当我在Activity C时点击返回,就会显示来自Activity B的信息。然后我再次点击返回,Activity a 的信息就出现了。

然后,当我从活动 A 转到活动 B 时,就会出现问题。当然,我希望保存在第二页上的信息,但它重新创建了活动 B,并且所有信息都丢失了。如何使活动 B 恢复而不让活动被破坏。我在文档中读到,当使用向上导航时,当前活动被破坏,而后堆栈中的活动被恢复。我不知道如何实现。

非常感谢任何帮助。

编辑:我想要的更直观的表示。这是来自文档:

如图所示,当当前 Activity 为 Activity 3 时按下返回,Activity 3 被销毁。我不希望这种情况发生。可以保存 Activity 3 以便稍后恢复吗?

【问题讨论】:

    标签: android android-intent navigation back


    【解决方案1】:

    您的解决方案来自docs

    同样,如果您向上导航到当前堆栈上的某个 Activity,则该行为由父 Activity 的启动模式决定。如果父 Activity 具有启动模式 singleTop(或向上意图包含 FLAG_ACTIVITY_CLEAR_TOP),则父 Activity 将被带到堆栈顶部,并保留其状态。导航意图由父活动的 onNewIntent() 方法接收。如果父 Activity 具有启动模式标准(并且向上 Intent 不包含 FLAG_ACTIVITY_CLEAR_TOP),则当前 Activity 及其父 Activity 都从堆栈中弹出,并创建父 Activity 的新实例以接收导航 Intent。

    回答您的整体问题

    你从A 转到B;然后从B 回到A 并且您希望保留B?回到B 继续你的任务的概率是多少-所以它将被杀死并重新启动。

    要提供某种解决方案,请使用已弃用的ActivityGroup,或者(我不确定这是否可行)-将launchmode="singleTop" 更改为singleInstance 并覆盖其onBackPressed() 以启动一个新的Activity,调用触发它的 Activity - 你可以通过getIntent() 获取触发它的 Activity。这里的逻辑是 singleInstance 驻留在不同的 Task 中并且不允许其中有其他 Activity,因此它杀死它,它不会死,当一个新的活动被触发时,由于你的接收活动有它的 lauchmode 和它的根,你在那里没有问题。 onBackPressed 的覆盖是为了防止正常流动..

    希望这次能有所帮助,但总的来说没有

    【讨论】:

    • 如我的问题所述。活动 A 和活动 B 在清单中都有 android:launchMode="singleTop"。这并没有解决我的问题。 Activity B 仍在重新创建,未恢复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多