首先了解一下Stack和Activity的关系
Stack就像一个容器,而Activity就是填充这个容器的东西,第一个Activity会在最下面,最后添加的Activity会在最上面。从Stack中取东西时,最后添加的东西最先取出,而最先添加的东西会最后取出。而Activity在Stack中的位置是可以控制的。在Activity跳转的时候可以通过Intent.FLAG....设置新建的Activity的创建方式。
1,FLAG_ACTIVITY_NEW_TASK
比如在栈1中已经有了A,B,C三个Activity,如果在C中以这种模式启动D。如果在AndroidManifest添加的Affinity的值与栈1中的不一样的话,则会在新标记的Affinity所在的栈中压入这个Activity,如果是一样或者是默认,则和基本启动模式的标准模式一样。(摸准模式见上一篇)
2,FLAG_ACTIVITY_BROUGHT_TO-FRONT
如:我们有A,在A中以这种模式启动B,B在正常启动C,D,此时栈的情况就是A,C,D,B。
3,FLAG_ACTIVTY_SING_TOP
相当于基本模式的SingleTop,如果栈种情况为A,B,C,D,再以这种模式启动D,那么栈中情况还是A,B,C,D
4,FLAG_ACTIVITY_CLEAR_UP (很有用)
相当于基本启动模式的SingleTask,如果栈种情况为A,B,C,D,再以这种模式启动B,那么栈中情况还是A,B
例如:
case R.id.btn4:
Intent intent=new Intent(NoteBookActivity.this, ViewPagerActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
break;
这时按钮的功能类似于回退键。
5,FLAG_ACTIVTY_NO_HISTORY
用这个FLAG,一旦退出,它将不复存在。如果栈种情况为A,B,C,在C中以这种模式启动D,D再正常启动E,此时栈中情况为A,B,C,E