声明,本文主要介绍launchMode,其他的属性都是默认值的情况。避免干扰。
全文用A代表当前Activity,其他Activity为O
standard
这种是默认的模式,也是最简单的,就是手机上所有是standard模式的activity之间调用都会遵守如下顺序,
新建A对象--->将此对象放入task顶部—>显示当前A
这种模式的列子, 比如写邮件的A(只是写不是浏览收件箱或什么的),希望对每一个调用他的task都需要新建一个A。
singleTop
其实这种模式是最不好理解的(需要看启动者的模式), 官方文档总结一句换就是自己启动自己的singleTop时不会重建,只是执行一下onNewIntent和onResume。这种模式有两点需要理解的
(1)存在栈顶的A。自己调用自己。
(2)存在栈顶的A。在O中调用A,O的模式为singleInstance(为什么会这样以后task管理文章会介绍)。
所以此模式只在同一个task上调用起作用,task之间不可以(除非O是singleInstance)。
这种模式的列子, 比如searchactivity,在search页面搜索,结果显示在当前页面。整体一段逻辑就可以了。
singleTask
从字面意思理解是只能在一个task中存在的意思。有两种情况,
1,存在A,就去找到存在A的task,切换到当前task,将之上的所有O出栈,显示A。 这种模式在有两种情况。
2,不存在A,新建A,并根据taskAffinity判断是否新建task,如果相同则不新建task,只将A入当前task,反之
新建task(关于taskAffinity就是相似性,以后有机会详解)
这种模式的列子, 比如邮箱的index页面,此页就像是单独模块的首页一样,
singleInstance
这种模式非常简单,就是当前系统中只有一个A,并且task中只有A,没有其他activity。
这种模式与singleTask非常相似,唯一不同是A所在task中不能包含其他activity。
总结,模式主要控制两种功能1,新建不新建 。2,入不入当前栈。
1,新建不新建由当前activity模式决定
2,如不入当前栈由启动他的activity和当前activity共同决定