activity的启动模式

      activity的启动模式有四种:分别是standard,singleTop,singleTask,singleInstance.

为什么会有这四种模式,先来讲讲activity的管理。我们知道一个应用会有很多个activity,那android用什么数据结构管理这些activity呢?答案是栈,我们称之为任务栈。

栈的特点是后进先出,大家应该都知道。

     每创建一个新的activity,把它放在栈的最上面也就是栈顶,当我们按下back键时,就会把

     前台任务栈最上面的activity从栈里扔出去,然后就会在界面上显示这个activity下面的那个activity.(对的,任务栈还分为前台的和后台的,正在运行的这个activity所在的任务栈就是前台任务栈,其它都是后台任务栈)

     如果创建的是同一个activity,我们也要不断未它创建实例吗?


接下来分别说说我对这四种模式的感受。

          standard模式:无论用到什么activity,它都为这个activity创建一个新的实例。这个实例放在启动它的那个activity所在的栈里,假设是activitya启动activityb,那么activityb和activitya放在同一栈里。如果standard不断用c启动c,任务栈里将会是这样:c c c c c c c c c(感觉这种方式是不是傻不拉叽的)


          singleTop模式:它比上一个模式聪明点,如果位于栈顶的是同一种activity,它将直接调用,而不会创建新的实例。如果栈顶是c,它就不会再创建c的实例了,而是直接复用这个c。但如果是cba,就是说栈顶是a,它还会创建新的c,变成cbac.(感觉是半傻不拉叽模式,又叫栈顶复用模式)


           singleTask模式:哈哈,这种模式比较特别,可以给他指定TakAffinity属性,该属性值默认是包名。即指定以这种模式启动的acitivity所需的任务栈,如果该任务栈不存在,那么先创建这个任务栈,然后创建这个activity,入栈。如果该任务栈已经存在了,则

看这个任务栈里是否有这个activity,如果存在,则让该栈位于这个activity上的所有activity都滚蛋,把这个activity拉到栈顶来。比如:cabd,如果要启动a,则bd滚蛋,变成ca了。

如果这个栈内没有这个activity,就在栈顶创建新的实例。(感觉这种是一夫一妻制,只能有一个,又叫栈内复用模式)


        singleInstance模式:这种模式每个activity都在单独的栈内,这个栈里只有也只能有这个activity,感觉相当孤僻,还起个这么长的名字。

   我们怎么指定启动模式呢,一个是在代码里指定,一个是在AndroidMenifest内启动。前种方式优先级较高。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值