android-activity启动模式

activity启动模式有四种,standard,singleInstance,singleTop,singleTask


standard标准模式
默认情况就是这个模式,activity会入栈并居于栈顶,每次启动都会新创建一个实例,但这种模式有个很不合理的地方,比如我们在A页面再次启动A,这样也会创建新实例,栈内就会变成两个A的实例。。
singleTop
这种模式下比默认的要合理一些,当我们要启动的activity已经位于栈顶时再启动它就不会创建实例,而是用我们栈顶已经有的activity,否则将新建实例,例如栈内最下面是A,A上面是B,当我们此时启动B时是不会创建新实例的,因为B已经在栈顶了,如果这时启动A的话A会创建实例,栈内就会变成ABA了。

singleTask

首先说明一点,activity入哪个栈是和调用者有关的,默认情况下是和调用者同栈

此模式下先查找需要的栈是否存在,不存在会创建该栈并创建activity,若该栈存在会在栈内查找是否已经存在将要启动的activity实例,若有则将其上面的所有activity出栈,这样使该activity置于栈顶,不会新建实例,若没找到则会新建实例

singleInstance
这种模式每个activity都会新建一个单独的栈,我们可以用getTaskId来追踪,这种模式有效的解决了不同
程序共享实例,两个程序各有自己栈的情况下想用对方的activity入栈,正常入栈必然会新建实例,现在

都用同一个栈了,则实例也就能共用了。singleInstance属于singleTask的一种特殊形式,它有singleTask的属性,只是每次要检测当前要启动的activity是否存在,不存在就建一个新栈压入activity。

这里说一下这个多栈的情况,我们的栈也是分前台和后台的,我们的activity需要放到什么栈是可以控制的,activity的TaskAffinity属性可以设置栈名,但这个名必须是类似包名的形式,而且不能为当前应用的包名,因为默认栈就是当前应用包名的,所以看不到效果,一般只有在singleTask模式才会去设置这些东西。

启动模式不仅可以在配置文件中用launchMode设置,也可以在代码中设置,intent有addFlags方法,像singleTask就可以在代码中设置intent.addFlags(intent.FLAG_ACTIVITY_NEW_TASK);但是这两种方式有些区别,在代码中设置优先级会高些,而且可以和其他的标示一起设置,如clearTop,但singleInstance模式必须要在配置文件中设置

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值