【Activity】Activity的四种加载模式

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次

<二>singleTop
        创建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里面取值。


猜你喜欢

转载自blog.csdn.net/qq_29266921/article/details/75646438
今日推荐