Android Activity四种启动模式比较:standard,singleTop,singleTask,singleInstance

在Android中,Activity有4种启动模式,可以通过在注册文件中对Activity增加LanchMode设置该属性.下面说说这4个启动模式的区别.

首先,standard模式最简单,系统默认的就是该模式.这种模式情况下,我们调用一次startActivity(Activity activity),就发创建一个Activity的实例,并将其放入当前栈顶.这种情况就没什么好说的了.

SingleTop呢,就是在standard模式上的一种改变.假设activityA属于TestAcitvity的实例.那么我们假设:现在ActivityA处于栈顶,这种情况下我们调用startActivity()方法启动一个TestActivity.这个时候,系统就不会去重新创建一个TestAcitivity的实例.而是重新使用acitivityA这个实例.也就是说栈中Actiivity的个数不会改变.如果我们的ActivityA不处于栈顶,栈顶是不属于TestActivity的实例.这个时候,系统就和standard模式一样,会再去创建一个TestActivity的实例,并将其压入栈中.

SingleTask的情况,就是在SingleTop的模式上再次优化.它做出的改变就是不管TestActivity是处于当前栈顶,只要当前栈中有它的实例,我们调用startActivity()方法启动一个TestActivity,这都不会去重建实例.它只会重用已有实例.假如,当前栈没有TestActivity的实例的时候,它就会重新建个栈,然后建立一个TestActivity的实例.这个栈中允许有非TestActivity的实例存在的.

SingleInstance这种模式它与SingleTask比较就会很霸道了.当我们调用startActivity()启动TestActivity的实例的时候,它会新建一个栈去存放TestActivity的实例,并且新建的栈中,它不允许存在其它非TestAcitivty的实例存在,也就是说,新建的栈中有且只有一个对象.注意:假设我们在启动TestActivity的实例的时候,已经有一个这样的栈存在的时候,它就不会去新建栈了,它会去重用那个栈的实例.也就是说呢,当我们设置了SingleInstance这种模式的时候,整个系统都只会有一个实例存在,而且,它位于自己特有的栈中.


特别注意一点:如果我们调用startActivityForResult()那启动设置了SingleTask或者SingleInstance的Activity时,这个时候我们是收不到返回的结果的.所有,如果我们需要startActivityForResult()获取结果,那么我们就不能设置SingleTask或者SingleInstance.因为我们设置了SingleTask或者SingleInstance时,可能我们要启动的Activity和当前Activity并不处于同一个栈当中.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值