Activity的四种加载模式:standard、singleTop、singleTask、singleInstance
<一>standard默认模式,不需要配置launchMode
每次都创建了该Activity的新实例
按回退键,按照之前创建Activity实例的倒序依次出现,类似退栈的操作,而之前跳转Activity的过程是压栈的操作
操作:A A---B A---B---A A---B---A---B
实际:A A---B A---B---A A---B---A---B
3次!3次
创建intent的时候栈顶已经有要创建的Activity的实例,不创建新的实例
注意:是栈顶,不在栈顶照样创建新实例
操作:A A---B A---B---B
实际:A A---B A---B
<三>singleTask与 singleTop类似
只要栈中有Activity实例,就不创建新实例,无需是栈顶。
跳转已有Activity时,实例会回到栈顶,即把在他上面的activity全部销毁掉
操作:A A---B A---B---C A---B---C---B A---B---C---B---A
实际:A A---B A---B---C A---B A
<四>singleInstance
一个栈对应一个activity,也就是说,创建一个Activity,就会开辟新栈。
在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中
下面是面试官问的问题
有5个Activity,A(standard)、B(singgleTask)、C(singgleInstance)、D(singgleTop)、E(singgleTask),这是开启Activity顺序:A--B--C--D--E ,开启过程没有采用finish,然后从E开始按返回键,问:按几次回退到A?
答案在第9行。
扩展:
onNewIntent方法,什么时候调用?内部做了什么?
Activity创建的时候,不会调用这个方法,比如standard模式,每次都会新建一个Activity。
Activity已经存在,不用新建,此时会调用这个方法,这里取出intent的值。
跳转Acticity,什么情况下Intent传值失败?
Acticvity的onreate方法内取值的,且没有走onCreate方法的,取值失败,为什么没有走onCreate方法?当然是启动模式导致的,怎么解决呢?在onNewIntent方法里取值。
总之,没有执行onCreate方法,就在onNewIntent里面取值。