Activity启动模式总结

来源:互联网 发布:ubuntu没有文本输入 编辑:程序博客网 时间:2024/05/21 09:48

首先,感谢大家的分享,只有根据大家分享的经验,加上自己的体会,才能有一点点的总结哈!!!

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对象,并放入栈顶的位置。

 

可以将singleTasksingleInstance规为一组,他们之间的相同点为:

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

欢迎大家一起探讨!!!!

原创粉丝点击