andorid 启动模式面试题

    xiaoxiao2022-06-26  76

     

    现在有四个activity a,b,c,d ,设置a为标准模式,b为singletop模式 c设置singletask模式,d设置SingleInstance 模式

    a启动b ,b 启动 c ,c启动d 然后d启动a ,a在启动b ,b启动c ,c再启动d 

    那么此时栈中有几个activity ?

    当然 这些模式也可以随意设置或者启动顺序改变,问栈中有几个activity ,

    在想这类问题的时候需要清除四种启动模式,在回到这个问题的时候先了解下启动模式

     

    1 standard(默认) 默认启动模式

    每次启动一个Activity都会创建一个新的实例,并放入栈顶位置。也就说会不断地新建activity实例,都放入同一个task中

    2 singleTop 栈顶复用模式

    如果启动的Activity已经位于任务栈的栈顶,就不会重新创建实例,而是调用onNewIntent(intent)方法。反之创建新的实例加入栈中。 解释:这个是看栈顶有没有activitiy 有的话就直接使用,没有的就和默认模式一样了,先创建一个放在栈顶,

    3 singleTask栈内复用模式 

    只要该Activity在一个任务栈中存在,就不会重新创建新的实例。并把栈中在其之上的其他Activity Destroy掉,调用onNewIntent(intent)方法。如果不存在,创建新的实例并入栈。

    解释:这个模式创建的时候会先看栈是否存在活动的实例,有的话会把该activity上的所有活动毁掉,没有的话直接创建一个

    4 singleInstance单实例模式

    Activity只能单独位于一个任务栈中,并且这个任务栈只存在这一个实例。

     解释:这个是全局单例模式,自己还单独占一个栈,下次使用的时候直接调用即可,

    这个模式一般用在系统应用中比如锁屏等,一般我们写的app中很少用到,我工作好多年从来没有设置过,好尴尬,可能自己

    知识点不足,还需要多加努力学习,

    清楚了这些启动模式,现在回答下刚开始的面试题

    首先第一启动的时候无论设置怎么由于栈中都没有 ,所以首先会创建一个,重点就是

    在来一次启动

    记录下此时的栈的activity 

    画一个草图记录一下

    a->b->c->d

    之后d->a

    此时c 位于栈顶 a设置的默认模式此时a会创建 如下图

    之后d->a->b 

    此时a位于栈顶 ,b设置的栈顶模式, 但是由于栈顶不是b所以会在此创建b 如下图

    之后再d->a->b->c

    此时b位于栈顶,c设置的栈内复用模式 ,c会把它之上的活动销毁掉 此时如下

    之后再d->a->b->c->d 

    此时c位于栈顶,d设置的是singleInstance 栈中有了d的存在,不会再重新创建了

    效果图和上面的图一样

    2次启动之后栈 中的活动有a,b,c,d

    自己测试的效果如下

    测试效果和自己猜测的一样,  

    为了验证这次我点击手机的返回键,看看效果的是否是四个activity

    果然栈中此时之后四个activity, 

    无论这类面试题设置什么模式,细心想想,还是很简单的,这四种模式别弄错了

    如果回答正确了, 有人可能换回再问 

    b在此启动c的时候由于c没有创建那么它怎样传递数据, 

    ,若果你想到了,说明我上面的四种启动模式,您认真看了,没有想到可能还需要在看看 

    答案是onNewIntent 传递数据.,,,

     

     

     

     

     

     

    胡小牧 认证博客专家 Android Java 小程序 岁月推动着年华,伴随着流水的脚步走过春夏秋冬。回想一路走来磕磕绊绊,感谢前辈们的无私奉献,本文重在共享,欢迎大家转载,评论,指教,点赞,谢谢,如果您对文章存在疑问,或者和您的文章类似,请私信,----------------期待是心痛的根源,心不动,则不痛。

    最新回复(0)