Activity四种启动模式

Activity四种启动模式:

  • standard
  • singleTop
  • singleTask
  • singleInstance

在说Activity之前,我们先来介绍一个小知识点:栈。为什么会介绍栈呢?主要在于Activity四种启动模式在内存中其实是以栈这种数据结构存储的。如果能比较好的理解栈也就能更好的理解Activity四种启动模式。
栈(stack)作为一个先进后出(FILO)的数据结构,与队列一个先进先出(FIFO)非常类似。通俗你可以把它理解 洗盘子时叠起来的盘子,堆在最上面的先出去(先进后出),压在最下面的最后出去。(注:文章中的A B C D字母 都是指的activity

standard


standard作为activity的默认启动模式,非常像栈(stack)的先进后出,G处于最上面,A处于最下面。ActivityManager维护着一个充满activity的栈,第一个A通常是APP的入口activity,如图左边一样顺序添加A B C D E F G ,然后按照G F E D C B A的顺序退出栈列。
这里写图片描述

singleTop


理解了standard启动模式 其实其他三个模式都很好理解,英文单词前缀都是single单例,后面接着是三种情况的单例,singleTop 可以理解为栈顶唯一,我们画图举例说明
这里写图片描述
在已经存在 A B C D 栈列中再添加一个新的D,ActivityManager并不会新建一个D,而是选择复用原来的D来保持singleTop中的唯一性。如果栈顶为D,此时添加一个E后再添加一个D会是什么情况呢?

singleTask


上面的问题如果在singleTop模式,栈中会有两个D。因为在添加第二个D的时候此时栈顶为E,那么在singleTask中会是什么情况呢?
这里写图片描述
在singleTask中,只能存在一个Activity 如果再添加一个相同的Activity ,ActivityManager会把在前一个相同的activity之后添加的activity全删掉(我自己读起来都有点晕,可以参照上图理解),并把这个activity置于栈顶来保持singleTask模式中的唯一性。

singleInstance


这种启动模式比较特殊,因为它会启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入。我比较是喜欢用代码来实现
这里写图片描述

    Intent i = new Intent(Intent.ACTION_MAIN);
    i.setClassName(activityInfo.applicationInfo.packageName,activityInfo.name);
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(i);
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值