Android:FLAG_ACTIVITY_CLEAR_TOP和android:launchMode =“singleInstance”

时间:2011-05-05 18:06:40

标签: android android-activity android-intent bug-tracking

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

在我的应用程序上,如果我在AndroidManifest上安装了任何Activity:android:launchMode =“singleInstance”,当你尝试使用以下代码将堆栈“清理”到某一点时:

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

它转到那个活动..但是当你按下它时,它会返回到之前的...应该已经完成​​......

示例:

A - > B - > ç

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

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

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

由于

1 个答案:

答案 0 :(得分:3)

阅读这篇帖子:

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

似乎:

“上例中活动B的当前运行实例将会 或者在onNewIntent()中接收你从这里开始的新意图 方法,或者自己完成并使用新意图重新启动。如果它 已宣布其启动模式为“多个”(默认值)并且您已启用 没有在同一意图中设置FLAG_ACTIVITY_SINGLE_TOP,那么它将是 完成并重新创建;对于所有其他发射模式或如果 设置FLAG_ACTIVITY_SINGLE_TOP然后将此Intent传递给 当前实例的onNewIntent()。 “

这意味着您需要将launchMode设置为多个实例,并且仅使用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。