现在有四个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

andorid 启动模式面试题

之后d->a

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

andorid 启动模式面试题

之后d->a->b 

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

andorid 启动模式面试题

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

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

andorid 启动模式面试题

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

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

效果图和上面的图一样

andorid 启动模式面试题

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

自己测试的效果如下

andorid 启动模式面试题

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

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

andorid 启动模式面试题

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

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

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

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

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

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

 

 

 

 

 

 

相关文章:

  • 2022-01-08
  • 2022-01-08
  • 2022-12-23
  • 2021-12-27
  • 2021-04-28
  • 2021-06-17
  • 2021-07-30
  • 2021-11-26
猜你喜欢
  • 2021-04-15
  • 2022-12-23
  • 2021-07-12
  • 2022-12-23
  • 2021-09-13
  • 2021-09-04
  • 2022-02-05
相关资源
相似解决方案