- standard
标准模式也是默认的启动模式,每次start,都会走onCreate方法重建。 - singleTop
栈顶模式,start的时候,如果activity不在栈顶,会调用onCreate方法重建,如果在栈顶存在就会走onNewIntent方法,不会重建。 - singleTask
单任务模式,start的时候会走onNewIntent方法,不会重建。而且会把在它之上的activity退出栈。 - singleInstance
设置成这种模式的activity,他会自己在一个单独的栈内,start的时候,不存在实例就新建走onCreate,存在的话就走onNewIntent.
可以通过打印生命周期,看看调用顺序。
注意的地方
- 生命周期不能忘记onNewIntent方法
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
getIntent();
Log.e("title", intent.getStringExtra("title"));
}
这里有一个setIntent方法,如果不调用的话,getIntent方法获得的将是最开始创建的时候的Intent对象。因为activity的onNewIntent方法是一个空方法。
- 当设置singleInstance启动模式的时候。
由于activity将处于一个独立的栈中,如果不及时销毁,和处理好界面逻辑,会出现问题。
如:A(standard)->B(singleInstance)->C(standard),请问:如果按下一次返回键回到什么界面,按下两次返回键回到什么界面?
答案是,按下一次会到A,按下第二次回到B。
由于这个给我一种感觉,好像是先看栈的顺序,然后在看栈里面activity的顺序,来判断显示哪个activity。
- 如果A(singleTop)-> B(任意) (直接start)->A(singleTop)
A(singleTop)-> B(任意) (先finish(),再start)->A(singleTop),这里会有不同的地方。
**直接start的,A会走onCreate。先finish(),再start,A会走onNewIntent。**也就是说调用finish的时候就把B移除了栈,A回到了栈顶。