转自:https://blog.csdn.net/qq_26287435/article/details/99719794
综合以上的结果,我们可以得出结论,singleTop启动模式确实解决了栈顶Activity重复打开的问题,在多次点击的情况下,栈顶Activity只打开了一次。
singleTop真的能完全防止多次打开栈顶的Activity么?
虽然我们的bug完美解决了,但作为程序员,我们还是需要杠精下的。
这里我改下点击事件的代码,瞬间多次调用启动activity的代码,代码如下:
@OnClick(R.id.btn_test6)
public void onBtnTest6Clicked() {
for (int i = 0; i < 5; i++) {
startActivity(new Intent(this,
LaunchModeSingleTopTestActivity.class));
}
}
可以看到,我们的LaunchModeSingleTopTestActivity确实打开了五次。
其实这也很好理解,不管任何操作都是需要时间去执行的,我们的activity的启动过程也是。
即使我们给Activity设置了启动模式,他们也不是立刻生效的,也需要执行到对应的代码逻辑后才会生效。
所以如果我在for循环里面瞬间执行多次打开Activity的操作,那么启动模式生效的代码还未执行到,所以启动模式就不会生效。
转自:
https://blog.csdn.net/u013270444/article/details/80233205
因为启动的太快,导致系统判断有错误吧。
当然,也可以自己做一个计数,启动多次的话,就return,也可以把启动模式在代码里面改为sigletask
Intent intent = new Intent(ActivityBase.this, AppActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
这样就保证了,只会有一个。
自己测试时发现,虽然栈顶确实只有一个活动,但是每次启动一次都会调用
onpause()和onresume()