参考: http://marshal.easymorse.com/archives/2950
http://guide.eoeandroid.com/#Tasks_and_Back_Stack
http://blog.csdn.net/wang_zun_ren/article/details/6823257
http://blog.sina.com.cn/s/blog_7ec412690100y2vl.html
android的四种启动模式为:
standard,singleTop,singleTask,singleInstance
standard:这个是android默认的启动模式
假设A为standard模式 A-B-C 然后C再启动A A-B-C-A
singleTop:出入栈顶的就不再重新实例化
假设C为singleTop模式 A-B-C 然后C启动C A-B-C 如果 A-B-C-D 然后D启动C A-B-C-D-C
singleTask:这个比较复杂,个人理解为:
1、启动这个activity时,如果没有taskid相同的task存在,就新建一个task,如果存在,就放入栈顶
2、启动这个activity时,如果task中存在该实例,就会结束这个实例上面的所有activity,让这个实例出现在栈顶
3、另一个task启动这个activity时,如果taskB存在该实例,就执行2,并把taskB整体放在task上面
看例子
假设B为singleTask模式 TaskA A-B-C 按home键,TaskA转为后台 TaskB M-N 然后N启动B M-N-A-B 如果 TaskB M-N 然后N启动B 这个时候 B就会新建一个Task了 如果 A-B-C-A 然后A再到B A-B 清楚了C和A
singleInstance:Activity 总是它所在Task 的唯一成员,改Acitvity启动的其他所有都会在其他task里面
假设B为singleInstance模式 TaskA A 然后启动B TaskA A TaskB B 然后B启动C TaskA A-C TaskB B