Android 中 Activity 启动模式
Activity有四种启动模式:standard(默认), singleTop, singleTask和 singleInstance。
默认是standard,类似栈,先入后出。
参考资料 :http://www.cnblogs.com/meizixiong/archive/2013/07/03/3170591.html
可以测试下同一activity的变化
首先,默认为
standard
每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈;
private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv= (TextView) findViewById(R.id.tv); tv.setText(String.format("Task:%d\n Current:%s",getTaskId(),toString())); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //从当前activity跳转到MainActivity startActivity(new Intent(MainActivity.this,MainActivity.class)); } }); }
不断按button可以发现task没有发生改变,而地址不断改变
startActivity(new Intent(MainActivity.this,Main2Activity.class));
修改代码,让其在两个activity之间不断跳转
结果和上一结果一样,
singleTop
如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例;
在配置文件中修改启动模式
<activity android:name=".MainActivity" android:launchMode="singleTop">然后重复之前的动作同一activity之间不会变化而且会发现后腿的时候,会直接出去如果有两个activity,跳转其他activity时会改变地址singleTask
如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop;
可以清楚的看到1没变
因为先开的1
当开到2时,1还在栈里面,这个时候如果打开1会把2弹出,而且1退出就可以直接出去,从2按后退可以回到1.
singleInstance
如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例;
两个activity不公用同一个栈,不按退出的话栈并不会清空
栈里只会存一个实例
不管从哪都要两步才能退出,而且当你退出一个栈之后,重新到另一个栈,你可以看到地址变了