android启动的四种模式

   standard:顾名思义,标准的启动模式,也即默认的启动模式。他会创建 一个任务栈将打开的所有activity都放入。退出时按后进先出的原则依次将activity退出。这种启动模式看似没有问题,但其实有一个很大的漏洞:当一个activity不断打开它本身的话,栈会不断地进入该activity的实例化对象,显然,这导致了极大的开销,根据这个特点进行恶意的攻击要导致栈溢出也不是不可能。
  singleTop:这种启动模式可以算是对standard的一种补充吧,我想他应该是基于standard改进的,在standard的基础上增加了一个判断方法,若打开的activity与栈顶activity相同则不创建新的activity,否则创建实例化对象并入栈。虽然我没有进行实际的测试,不过,根据以往的经验编写这种函数应该是不费事的,尤其是只判断栈顶元素这一特点更是导致了算法所需的时间与空间复杂度都不算高。
  singleTask:与singleTop一样,也是对standard的一种补充,不过他是判断栈里而不是栈顶,稍微麻烦了一点,需要遍历(单是遍历时间复杂度就达到了O(n),而上一个算法时间复杂度目测为O(1))。并且如果栈里有该元素看,使该元素上方的元素全部出栈。个人认为这是一种明智的选择,如果只是把元素置于上方其实要比把上方元素清除要麻烦的多。不要忘了,栈是后进先出,也就是说,要想其他元素不变只把该元素置于栈顶,你需要一个辅助栈来完成这个工作。将上方元素移至辅助栈,用一个节点保存该元素,出栈,将辅助栈里元素移至任务栈,将节点入栈,完成。这比singleTask的开销要大得多,并且几乎毫无意义,因此我认为像singleTask一样的做法是相当明智的。
  singleInstance:这种启动模式对每一个activity都分配一个栈且只创建一个实例化对象,截止写博客时,不知道他想干什么,可能是想舍去入栈出栈的麻烦吧。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值