转载请注明出处:http://blog.csdn.net/onlybeyond99/article/details/50688344 挨踢人one
一、设置方式
1、通过在配置文件中设置Activity的launchMode熟悉设置启动模式
2、在StartActivity()之前对Intent设置启动标志
二、启动模式
1、
standard:
标准模式,这也是系统的默认模式。
每次启动一个Activity都会重新创建一个新的实例。
2、
singleTop:
栈顶复用模式。
在这种模式下,如果新Activity已经在任务栈中存在了并且位于任务栈的栈顶,那么新Activity不会被重新创建。
运用场景:后台service不停的加载数据,然后用startactivity更新数据,
3、
singleTask:
栈内复用模式。
两种情况:当Activity设置
TaskAffinity并且与原来不一样时会新开一个栈,将其放入栈地
没有设置时会加入当前的栈,如果之前的栈已经含有启动的Activity,则activity之上的其他Activity都会被移除
适用场景:注册包含多个页面,从比较深的页面之间回到首页导航
启动的Activity变为栈顶
4、
singleInstance:
系统会为他单独创建一个任务栈将其压入,如果再次启动他,他已经存在了,那么就直接复
用该任务栈。
单独占用一个任务栈
适用场景:一些特别消耗资源的Activity,比如包含地图的Activity
三、启动标志
1.
FLAG_ACTIVITY_SINGLE_TOP
与launchMode="singleTop"具有相同的行为
2.
FLAG_ACTIVITY_NEW_TASK
单独用通常没效果,需要
与FLAG_ACTIVITY_CLEAR_TASK或FLAG_ACTIVITY_CLEAR_TOP联合使用。
与
FLAG_ACTIVITY_CLEAR_TASK一起使用能够能够清除之前的Activity
与
FLAG_ACTIVITY_CLEAR_TOP时需要把
TaskAffinity设置的和之前不一样。这时的效果类似于
singleTask不同
TaskAffinity的效果
四、关系与比较
两种都能对Acitity的启动模式进行设置,且有很多模式两种都能实现。(
singleInstance只能第一种实现
)
但个人感觉启动标志会更灵活一些。因为很多的 Activity使用的多次,而且需求不一定一样。这时通过启动标志来控制回方便很多
独学而无友,则孤陋而寡闻!分享知识,交流技术,碰撞思想!