【问题标题】:FLAG_ACTIVITY_CLEAR_TOP and android:launchMode="singleInstance"FLAG_ACTIVITY_CLEAR_TOP 和 android:launchMode="singleInstance"
【发布时间】:2019-09-03 14:39:51
【问题描述】:

我想我刚刚发现了一个非常奇怪的错误……但它可能只是某种我从未听说过的功能。

当您尝试使用以下代码将堆栈“清理”到某个点时,如果我在 AndroidManifest 上有任何带有 android:launchMode="singleInstance" 的 Activity,则在我的应用程序上:

    Intent intent = new Intent(this, Xpto.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP
            | Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);

它去那个活动。但是当你按回时,它会回到上一个。应该已经完成​​了......

例子:

A -> B -> C

然后从 C 我用 Intent.FLAG_ACTIVITY_SINGLE_TOP| 调用 A Intent.FLAG_ACTIVITY_CLEAR_TOP 在 Manifest 上有一个 singleInstance。它去了A,但它只把它带到了前面。并且没有完成 C 和 B。

有人可以解释这种行为吗?

我正在调用的 Xpto 类当时是堆栈的根活动。

【问题讨论】:

    标签: android android-intent android-activity


    【解决方案1】:

    阅读本帖:

    http://groups.google.com/group/android-developers/browse_thread/thread/5eb400434e2c35f4

    看来:

    "上例中当前运行的Activity B实例将 要么在 onNewIntent() 中接收你从这里开始的新意图 方法,或者自己完成并以新的意图重新启动。如果它 已将其启动模式声明为“多个”(默认)并且您有 没有在同一个意图中设置 FLAG_ACTIVITY_SINGLE_TOP,那么它将是 完成并重新创建;对于所有其他启动模式,或者如果 设置了 FLAG_ACTIVITY_SINGLE_TOP 然后这个 Intent 将被传递到 当前实例的 onNewIntent()。 "

    这意味着您需要将您的启动模式设置为多个实例,并且只使用 FLAG_ACTIVITY_CLEAR_TOP。

    Intent intent = new Intent(this, Xpto.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
    

    在您描述的场景中,当您启动活动 A(这是根活动)时,活动的 B 和 C 尚未完成。文档描述了使用 singleInstance 的启动模式和标志 FLAG_ACTIVITY_SINGLE_TOP 设置,活动 B 和 C 将不会完成。如果要完成活动 B 和 C,则必须将启动模式设置为多实例,而不是设置标志 FLAG_ACTIVITY_SINGLE_TOP。

    【讨论】:

    • 再次阅读我的问题。您没有提供任何答案。
    • 我相信您是在要求解释为什么在您描述的场景中,当您开始活动 A(这是根活动)时,活动的 B 和 C 没有完成。我试图解释的可能很糟糕的是,文档描述了在 singleInstance 的启动模式和标志 FLAG_ACTIVITY_SINGLE_TOP 设置的情况下,活动 B 和 C 将不会完成。如果要完成活动 B 和 C,则必须将启动模式设置为多实例,而不是设置标志 FLAG_ACTIVITY_SINGLE_TOP。希望这会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多