android Activity的四种启动模式详讲 singleTop standard singleTask singleInstance

 学习安卓也有好长时间了,对于activity的启动模式还是有点模糊。找个个时间详细的看了一下。顺便总结一下。。

   Activity的四种启动模式为:standard,singleTop,singleTask,singleInstance。

(一):standard(标准模式)

这个是默认的模式。activity是该模式时,每次启动都会创建一个实例,放入启动这个activity所在的栈中。

(二):singleTop(栈顶复用模式)

在该模式下,启动这个activity时,会先判断栈顶是不是这个activity的实例,如果是则不在创建新的activity,直接复用该实例。如果不是则会重新创建一个实例,放入栈中。复用就会执行onNewIntent()方法。

证明:1.有两个activity。A和B,B的启动模式为singleTop。A-->B-->B. 打印的log如下:


可以发现,还是在这个栈中,并复用了该实例。

2.现在有三个activity:ABC,B的模式还是singleTop ,启动步骤为:A-->B-->C--B。log如下:


可以发现如果不在栈顶会重现创建一个实例

     (三):singleTask(栈内复用模式)

在该模式下,启动这个activity时,会先判断栈内有没有该实例,如果有则不再创建,把该实例提到栈顶,并把这个实例之上的实例全部出栈(亦可以说清除)。复用就会执行onNewIntent()方法。

这里还有一个任务栈的问题,怎么来确定放入哪个栈中(所有模式同理),启动该activity的实例在哪个栈中就放入哪个栈,如果activity设置了taskAffinity(可以理解为栈名)这个参数(必须有“.”  ,系统默认的是应用的包名,)则会创建一个新栈来放该实例。

证明:有三个activity。ABC。A的启动模式为singleTask。启动顺序A-->B->C-->A。log如下:


发现复用的这个实例。当我按back时,发生了什么????结果直接回到了桌面。这也可以证明把这个栈中A实例之上的实例全部出栈(亦可以说清除)。新建栈这个例子就不写出来了。有兴趣大家可以自己动手证明一下。。

    (四):singleInstance(单实例模式)

在该模式下,启动的activity会重新创建一个栈,放入其中,该activity独享这一个栈。

证明:有ABC 三个activity,B和C模式为singleInstance。执行顺序为A-->B-->C-->B。log如下:


很明显可以看出不在一个栈中,最后启动B时会复用B的实例。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值