关于singleTask 模式的学习体会

这篇博文 http://marshal.easymorse.com/archives/2950 关于区分Activity的四种加载模式 写的很显浅易懂

下面是博文中关于singleTask 的一段讲解


当时看完这段后就设想如果ActivityA 和 ActivityB 都设置为singleTask的话那么在 ActivityB 跳转到 ActivityA,之前的 ActivityA 被调到了任务栈的最前面,如果这时在 ActivityA 跳转到 ActivityB 那么应该是跳转到上一个 ActivityB,接下来看到这个评论
 
就是开始疑惑了,后来自己写个程序测试下,果真跟评论说的一样,就是 ActivityB 也设置为singleTask情况下,每ActivityB 都会产生一个新的实例,后来又改了下程序,添加了和 ActivityC 再测试,发现原来在一个任务栈中,如果一个 Activity 比如说 ActivityA 设置了singleTask,当有个intent要实例化它时,系统会查找任务栈有没有 ActivityA,如果已有的话,就将这个任务栈中排之前的所以 ActivityA 之上的 Activity 销毁,这样ActivityA 就排在栈顶了,而不是像我之前理解的那样以为只是将它调到栈顶。
下面是根据自己的理解画了图





另外一个留意到的地方是,如果一 个ActivityC 设置了singleInstance(单一实例)时,它跳转到了另一个 Activity,比如ActivityB,此时你按back后退键的话,如果此时 ActivityB 所在的任务栈里还有一个 ActivityA,那么就会跳到 ActivityA,不是跳转到 ActivityC,只有当 ActivityB 所在的任务栈无其他 Activity 时,才回跳转回 ActivityC 。


你可能感兴趣的:(Android)