码迷,mamicode.com
首页 > 其他好文 > 详细

关于singleTask (LaunchMode随笔)

时间:2016-11-16 11:35:39      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:int   chm   affinity   多个   android系统   pid   先来   task   复杂   

今天,居然被问起关于singleTask的问题,问题如下:
     “现在Activity栈里有4个Activity,从栈底到栈顶分别是A->B->C->D,现在从Activity D启动Activity B,问此时的栈情况。”
我居然忘了,只是记得有singleTask/singleTop/singleInstance,又还记得有一个是会把他上面的Activity全部Pop出,自己回到栈顶(殊不知这个现象就是问题的答案),从现象和字面上看来好像是singleTop。
回来之后怒查Google,并写了个小程序实践了下,增强印象,并决定写下Blog以便以后回顾。
 
现在我们先来复习下,singleTask和singleTop分别是什么样的行为。
 
> LaunchMode为singleTop
     其实singleTop很简单,就是当且仅当Activity在栈顶的时候才会复用(意思就是栈顶绝不会有连续两个该Activity),当Activity不在栈顶的时候都会重新创建的。
同学们可能会纳闷,都在顶部那有什么卵用啊,栈顶不就代表着是手机显示的Activity吗?不是的,其实Android系统中有很多的Task栈的,同个栈里的Activity都是一个Task(Task是个复杂的概念,具体的概念请看官方文档,你可以简单理解为一个任务场景)。
比如:
 
TaskA:
(栈底)ActivityA1 -> ActivityA2 (singleTop)
 
TaskB:
(栈底)ActivityB1 -> ActivityB2(启动ActivityA2)
 
目前界面为ActivityB2,ActivityB2启动ActivityA2,那当前栈会切换到TaskA,连续按返回键的Activity顺序为:
  
      ActivityA2 -> ActivityA1 -> ActivityB2 -> ActivityB1
看到区别了吧。
 
> LaunchMode为singleTask
     只要Activity存在栈中,都会被复用,但是会直接把Activity推到栈顶(也就是会把Activity到栈顶的其他Activity全部出栈)。
比如:
 
TaskA:
(栈底)ActivityA1 -> ActivityA2 (singleTask)-> ActivityA3
 
TaskB:
(栈底)ActivityB1 -> ActivityB2(启动ActivityA2)
 
目前界面为ActivityB2,ActivityB2启动ActivityA2,那当前栈会切换到TaskA,连续按返回键的Activity顺序为:
  
      ActivityA2 -> ActivityA1 -> ActivityB2 -> ActivityB1
ActivityA3不见了,A3在B2启动A2的时候就被出栈销毁了。
 
> LaunchMode为singleInstance
     这个更简单,就是我只想一个人静静地。自己一个人独占一个栈,不会包含其他的Activity。
 
简单吧,这样LaunchMode就都讲明白了。
 
最后说下怎么启动一个新的Activity栈,难道非要建多个App(好麻烦啊)?
其实是不用的。
 
我们在AndroidManifest.xml中声明Activity的时候,有一个taskAffinity参数的(如果没有显示声明,则默认继承于Application,Application没声明则默认为AppId[包名])。
通过声明taskAffinity和Intent.FLAG_ACTIVITY_NEW_TASK可以把该Activity创建在新栈。
 
注:taskAffinity需要和包名一样的格式。
 
写在最后
没有图片比较简单,但我会继续加油优化的,先把写Blog的习惯养成。
 
 
 

关于singleTask (LaunchMode随笔)

标签:int   chm   affinity   多个   android系统   pid   先来   task   复杂   

原文地址:http://www.cnblogs.com/BlueVienna/p/6068672.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!