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