Activity的启动模式 4种launchMode Intent.FLAG_NEW_TASK 详解

时间:2021-01-16 16:44:29

参考:http://blog.csdn.net/liuhe688/article/details/6754323

了解android开发的同学都知道 android开发 主要内容就是四大组件:Activity、 BroadCastReceiver、Service、ContentProvider 

而Activity又是重中之重  所以了解Activity的生命周期,启动模式等对我们来说是非常有必要的 。本文主要讲讲Activity的启动模式及其相关概念。

Activity的启动模式主要四种,standard、singletask、 singletop、 singleinstance 讲启动规模前,先引入一个概念Task,task 是一个栈结构的容器,

用来存放Activity实例,android启动每一个应用时,都会创建一个task然后将根Activity置于栈内,默认情况下,android应用的所以Activity实例都会处于同一个task内

当从一个Activity启动另一个Activity时,后者Activity会压入栈内,置于前者之上,依次类推,当用户按下back键时,当前的显示的Activity就会弹出栈,该Activity下面的

Activity实例便会置于栈顶,显示到屏幕前。接下来说说Activity的4种启动模式。

1.standard                      

Activity的默认启动模式就是standard,无需配置Activity的launchmode属性

默认设置standard启动模式的Activity,每次启动该Activity都会创建新的实例,不管task有没有已经存在的示例,都会创建新的Activity示例置于栈内。

2.singletask

当一个Activity的launchmode设为singletask,当我们start该Activity时,首先会在Activity栈中去查看是否有该Activity实例,如果有该实例则直接使用该实例,

切把该实例之上的所有Activity清除(出栈),如没有会创建一个新的实例出来。

 

3.singleTop

该启动模式和singletask有相似之处,当我们启动一个设为singleTop启动模式的Activity时,也会去Activity栈中查看是否有该Activity实例,不同之处在于,只会查看栈顶是否有该

实例,如果有,则直接使用该实例,如没有,则会创建新的实例出来

4.singleInstance

该启动规模比较特殊,如果将一个Activity的launchmode设为singleInstance后,当启动该Activity时,会创建一个新的活动栈,然后将该Activity放置于改活动栈中,且别的Activity

不会进入到该栈中,比如俩个应用程序共用一个Activity活动时,就可以将该Activity的launchmode设置为singleInstance。