美文网首页
activity启动模式

activity启动模式

作者: 程序猿峰岑 | 来源:发表于2019-04-08 16:13 被阅读0次

    前沿:activity的启动模式应该是比较基础但面试问的最多的问题,面试官基本上都会根据启动模式来展开一系列的问题,作为记录和巩固便有了此篇文章

    activity有四种启动模式: 标准模式(standard)、   栈顶复用模式(singleTop)、栈内复用模式(singleTask)、单实例模式 (singleInstance ).     

    1.standard :也是系统默认的启动模式,每次启动一个activity都会重新创建一个新的实例,即使这个实例存在的情况下他的oncreate 、onstart、onresume都会被调用,这也是一个典型的多实例实现  例如:当我们从ActivityA跳转到ActivityB (B为标准启动模式) 那么ActivityB就在A的栈中。注意事项:当我们用applicationContext去启动标准模式的Activity时就会报错。怎么解决这个问题呢?可以使用FLAG_ACTIVITY_NEW_TASK来解决这种问题

    2.singleTop:栈顶复用模式,如果新Activity已经位于任务栈的栈顶,那么此activity不会被重新创建,同时他的onNewInstance方法会被回调。例如:栈内的情况为abcd  a位于栈底。d位于栈顶。 再次启动d 栈内的情况还是abcd 

    3.singleTask:栈内复用模式是一种单实例模式,在这种模式下,只要activity在一个栈中存在,那么多次启动此模式也不会被重新创建,同时他的onNewInstance也会被回调 例如:

    当前任务栈S1中的情况为ABC  ,这个时候ActivityD以singleTask模式请求启动,其所需的任务栈为S2,由于S2和ActivityD均不存在,他先会创建任务栈S2,然后再创建D的实例并将其入栈到S2中。

     如果activityD已经存在在S1的任务栈。系统会直接创建D的实例并将其入栈道S1中 

    如果D所需的任务栈为S1,并且当前任务栈S1的情况为ADBC ,根据栈内复用的原则,此时D不会重新创建,系统会把D切换到栈顶并调用其onNewInstance方法,同时由于singleTask默认具有clearTop的效果,会导致栈内所有的Activity全部出栈,于是最终S1中的情况为AD

    3:singleInstance:单实例模式 它具有singleTask的所有特性外,还强加了一点,那就是具有此种模式的Activity只能单独地位于一个任务栈中,也就是说ActivityA是singleInstance模式当A启动后,系统会为他创建一个新的任务栈,然后A独自在这个新的任务栈中,由于栈内复用的特性,后续的请求均不会创建新的Activity。

    相关文章

      网友评论

          本文标题:activity启动模式

          本文链接:https://www.haomeiwen.com/subject/phtpiqtx.html