首先,感谢大家的分享,只有根据大家分享的经验,加上自己的体会,才能有一点点的总结哈!!!
Android中Activity的启动模式有四种,分别为standard、singleTop、singleTask、singlestance,设置系统的启动模式可以在AndroidManifest.xml中的<Activity>标签中添加如下属性:
android:launchMode="standard"
android:launchMode=”singleTop”
android:lauchMode=”singleTask”
android:lauchMode=”singleInstance”下面逐一分析下:
可以将statnder与singleTop模式规为一组,因为这两个模式之间存在这很多共性:
1 对于Activity而言,可以被创建多次,并且可以属于不同的task;
2 对于task而言,同一个task可以存放不同的Activity对象,并且可以同时存放多个同一个Activity的对象。
二者之间的区别为:
standard为默认模式,每次都会创建一个新的Activity对象,singleTop为当请求的Activity正处于栈顶时,则不重新创建该Activity;如果请求的Activity不处在栈顶,则会继续创建该Activity对象,并放入栈顶的位置。
可以将singleTask与singleInstance规为一组,他们之间的相同点为:
singleTask和singleInstance模式下,系统在同一时刻只会存在一个对应的Activity对象,即不存在时创建,存在时直接使用。
而二者的不同点是:
singleTask模式下允许Task中存在其他的Activity,但是singleInstance模式下Activity会独占一个task,即会为对应的Activity创建一个新的task,该task中只存在一个模式为singleInstance的Activity对象
而singleInstance就是我们常说的单例模式,通过这种模式启动的Activity会存在与一个单独的Task中。
在这四种模式中,让我比较困惑的就是singleTask模式,因为在一个task中,如果有一个Activity的启动模式为singleTask模式时,其他的Activity会被Destory掉,但是我之前一直没有发现这种情况,发现这一情况后,我就开始研究究竟有哪些Activity会在什么时候被Destory掉,慢慢的我找见了规律就是:
ActivityA ---> ActivityB(singleTask) --> ActivityC --> ActivityA --> ActivityB(singleTask)
如果按照上面的逻辑执行,当执行到最后一步时,ActivityA ,ActivityC 对象会被destory掉,也就是说,如果一个task中含有singleTask模式的Activity,当第二次调用该Acticty时,存在于两次调用之间的Activity都会被Destory掉,而在第一次启动singleTask模式的Activity之前启动的Activity不会受影响,并不是把栈中其余的Activity都destory掉,描述的不够清楚,请多理解下,不行的话可以写个例子试下!!!
也可以参考:
http://blog.csdn.net/yihongyuelan/article/details/7079959
http://blog.csdn.net/leiswpu/article/details/6248528
欢迎大家一起探讨!!!!