1、在android的启动过程中有4种启动模式:
- standard
- singleTop
- singleTask
- singleInstance
2、4种启动模式主要有以下差别:
- 如何决定所属的task: standard和singleTop一般和activity的目标task和收到intent的发送者在同一个task内; 而singletask和singleInstance作为task的根元素,他们不会被启动到其他的task里;
- 是否允许多实例:standard和singleTop可以被实例化多次,并且可以存在于多个task中,同一个task中也可以存在多个standard和singleTop的实例;singleTop是如果activity实例在栈前已经存在,则intent将发送给该实例 ,而不是创建一个新的实例;
- 是否独占task:singleInstance独立一个task,不允许其它activity在其task中,即使通过该activity创建了其它的activity实例,也是在其它task中创建;
- 是否每次都生成一个新的实例 :standard模式时,每次都生成一个新的instance,而singleTop模式时,如果实例刚好在栈顶,则不生成新的实例;singleInstance模式,则它独占一个栈,每次都会被复用;而singleTask栈顶时,会接收发送的intent, 如果不在栈顶,则丢弃对应的intent,但singleTask仍然会回到前台;
3.Activity的生命周期
Activity的生命周期有7个,oncreate-->onstart-->onrestart-->onresume-->onPause-->onStop-->onDestory;
其中启动周期从onstart直到系统调用onstop;
前台生命周期是从onResume直到系统调用onPause;
4.Android屏幕旋转的生命周期
- 当不设置activity的configchanges时,切屏会调用各个生命周期。其中切横屏调用1次,切竖屏调用2次;
- 当配置configchanges=”orientation“时,切屏会调用各个生命周期。但切横或竖屏时,只调用1次;
- 当配置configchanges="orientation|keyboardHidden"时,切屏不会重调用各生命周期,只会调用onconfigurationchanged方法;
5.SingleTask与SingleInstance的区别
singleTask可以与其它standard的共处一个 task中,使用相同的栈;并且从其它activity中唤醒singletask模式的activity时,它上面的所有activity全部出栈;
singleInstance被其它standard模式启动时,不同standard模式的activity同处一个task,而是重新启动了一个新的task;