其他分享
首页 > 其他分享> > Android:FLAG_ACTIVITY_CLEAR_TOP和android:launchMode =“singleInstance”

Android:FLAG_ACTIVITY_CLEAR_TOP和android:launchMode =“singleInstance”

作者:互联网

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

在我的应用程序上,如果我在AndroidManifest上安装了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

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

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

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

谢谢

解决方法:

从阅读这个线程:

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.

标签:android,android-activity,android-intent,bug-tracking
来源: https://codeday.me/bug/20190630/1339169.html