基础:Activity的四种launchMode

Activity一共有以下四种launchMode:

1.standard

系统默认的模式,默认情况下,都创建一个新的activity出来,不管是不是相同的类,都创建一个新的。

2.singleTop

该模式启动时,会先判断当前栈顶的activity是不是intent要跳转的类型,如果是,则跳到栈顶的这个activity对象,如果栈顶的activity对象不是intent要跳转的类型,就创建一个新的activity对象。


基础:Activity的四种launchMode_第1张图片

当从SecondActivity跳转到FirstActivity时,系统发现存在有FirstActivity实例,但不是位于栈顶,于是重新生成一个实例。

这就是singleTop启动模式,如果发现有对应的Activity实例正位于栈顶,则重复利用,不再生成新的实例。

3.singleTask

该模式启动时,会检测栈内是否存在相同类型的activity对象,如果存在,就把该activity以上的activity对象全部清除,并把activity对象变为栈顶对象;但是如果栈内没有相同的activity对象,则在栈顶启动一个新的activity对象。


基础:Activity的四种launchMode_第2张图片

我们注意到,SecondActivity消失了,没错,在这个跳转过程中系统发现有存在的FirstActivity实例,于是不再生成新的实例,而是将FirstActivity之上的Activity实例统统出栈,将FirstActivity变为栈顶对象,显示到幕前。

这就是singleTask模式,如果发现有对应的Activity实例,则使此Activity实例之上的其他Activity实例统统出栈,使此Activity实例成为栈顶对象,显示到幕前。

例如,在IM里面的使用;当从聊天窗口点击头像跳转到用户详情页,从用户详情页或进入更深的页面后,再点击聊天按钮重新进入聊天室,聊天室这个Acitivity上面的其他Activity都被清空了,就是使用的这种模式。

但是,像进入登录页面的这种情况;如,登陆后关闭登录页,进入主页或进入更深的页面,然后退出登录后,退到登录页面,需要关闭其他的所有打开的页面,这里就不能套用这些登录模式,需要自己手动去关闭原来的所有页面。

4.singleInstance

它会启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入。


基础:Activity的四种launchMode_第3张图片

singleInstance启动模式可能是最复杂的一种模式,为了帮助大家理解,我举一个例子,假如我们有一个share应用,其中的ShareActivity是入口Activity,也是可供其他应用调用的Activity,我们把这个Activity的启动模式设置为singleInstance,然后在其他应用中调用。




转载地址:

基础总结篇之二:Activity的四种launchMode

你可能感兴趣的:(基础:Activity的四种launchMode)