Android——Activity四种启动模式

原文地址:http://blog.csdn.net/sapce_fish/article/details/52672495

Android中Activity的启动方式主要有四种

  • standard的启动方式
  • singleTop的启动方式
  • singleTask的启动方式
  • singleInstance的启动方式

demo下载地址:http://download.csdn.net/detail/sapce_fish/9641214

先说一下设置Activity启动模式的方式,在manifest文件中,给对应Activity设置android:launchMode属性,此属性有四个值,分别对应四种启动模式,如不设置此属性则默认为standar启动模式
这里写图片描述

下面来分别介绍一下这四种启动方式
standard启动方式

standard启动模式为activity的默认启动模式,来看看standard启动模式是怎样的
直接启动应用
这里写图片描述

这是MainActivity,可以看到上面显示taskId以及当前activity的序列号
接下来我们点击按钮跳转到standardActivity
这里写图片描述
可以看到当前的standardActivity的taskId为27291序列号为24fb2aeb
再次点击跳转按钮
这里写图片描述
当前也是在StandardActivity界面,但是Activity的序列号已经变成28831b78说明这是一个新的实例,按下返回键回到了上一个StandardActivity即序列号为 24fb2aeb的StandardActivity,再按返回键返回到了MainActivity,至此我们应该明白了Standard模式就是每次都会重新实例化Activity而不会进行复用。

singleTop启动方式

在demon中添加一个singleTopActivity后启动应用

这里写图片描述
点击跳转到single top Activity按钮
这里写图片描述
可以看到当前singleTopActivity的序列号为29017251
再点击跳转到single top Activity按钮
这里写图片描述
点击后发现当前singleTopActivity的序列号也是29017251说明是同一个实例(此时如果点击返回键就退到了MainActivity)我们点击跳转到main Activity按钮
这里写图片描述
点击跳转到single Top Activity按钮
这里写图片描述
此时singleTopActivity的序列号为301a5811而不是29017251即这是一个新的singleTopActivity实例
所以singleTop模式就是目标Activity已经在栈顶时(即最上层)则不重新创建实例而是直接复用,如果不在栈顶则会重新实例化

singleTask启动方式

同样的在demon中添加一个singleTaskActivity后启动应用

这里写图片描述
点击跳转到single task Activity按钮
这里写图片描述
此时singleTaskActivity的序列号为325c7c0a
我们再点击跳转到single task Activity按钮
这里写图片描述

发现此时的序列号和点击之前的是一样的,即当前activity跟点击之前是同一实例
我们现在来点击跳转到main Activity按钮
这里写图片描述
继续点击跳转到single task Activity按钮
这里写图片描述
发现singleTaskActivity的序列号跟之前的还是一样的即是同一个实例,由此我们发现singleTask模式就是当目标activity在栈中有实例时则不重新创建实例而是直接复用之前的实例
注意:singleTaskActivity复用之前的实例是先将在其上的其他实例先出栈

singleInstance启动方式

singleInstace启动模式跟之前3种启动模式比较不一样,具体我们先来看一下
首先启动应用
这里写图片描述
我们现在看一下当前的taskId为27383
接着点击跳转到single instance Activity按钮
这里写图片描述
此时的taskId为27384说明当前这个activity跟之前的activity不在同一个栈中,而是在一个单独的栈中
我们继续点击跳转到single instance Activity按钮
这里写图片描述
此时的taskId跟之前的是相同的,说明是在同一个栈里,序列号也是一样的说明是同一个实例
我们再点击跳转到main Activity按钮
这里写图片描述
此时mainActivity的taskId跟之前是一样的,说明跟之前的Activity是在同一个栈中的,但是序列号不一样,这个是正常的因为mainActivity采用的是默认的启动模式(即standard模式)所以会重新实例化,由此我们可以知道被声明为singleInstance模式activity会被单独放在一个堆栈中,当需要启动的目标activity声明为singleInstance模式并且在系统中存在则会直接复用

说了这么多最后用自己的话来描述一下这四种启动模式吧,如果描述的不够准确或是有误的地方欢迎各位指出

standard模式 每次都会重新生成一个实例

singleTop模式 如果在栈顶有当前activity的实例则直接使用,否则重新生成一个实例

singleTask模式 如果在栈中有当前activity的实例则直接使用(如果有实例但不在栈顶则将其之上的实例出栈),否则重新生成一个实例

singleInstance模式 如果系统中有当前activity实例则直接使用,否则重新生成实例并放置在单独的栈中

至此已经介绍了Activity的四种启动模式
如果有不明白的地方可以留言。有写错或者不好的地方欢迎指正

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值