四种启动模式:standard,singleTop,singleTask,singleInstance
通过在AndroidManifest.xml的<activity>标签中指定android:launchMode属性来设置启动模式
standard
standard是活动的默认启动模式,我们知道Android是通过栈来管理活动的,而此模式,系统不会验证此活动是否已经存在都会在栈顶创建新的活动实例!
例如:活动本身启动自己,启动了几次我们就要销毁几次才能关闭所有的活动。这些同样的活动在栈中也是有不同的位置名称的,可以确定是新的活动实例。
singleTop
如果指定了singleTop模式,在启动活动时系统会检测栈顶是否已经有该活动,如果有则直接使用,并不会创建新的活动实例了。
但是如果要启动的这个活动实例没有在栈顶位置,此时启动此活动实例的时候还是会重新创建此活动的实例!从他的命名Top就可以看出这个意思!
singleTask
使用singleTask模式,系统就会检测栈中是否已经有此活动,如果有则直接使用并把这个活动上的所有活动全部清除栈,没有则新建此活动。
singleInstance
singleInstance是最复杂也是最特殊的模式了,如果活动指定了singleInstance模式,那么系统会启用一个新的栈来管理这个活动。(其实如果singleTask模式指定了不同的taskAffinity,系统也会启动新的栈)
如果在工作中需要多个应用来访问此活动实例,就需要用到此模式,其他三种启动模式是无法做到的。因为每个应用都会有自己的栈,同一个活动在不同的栈入栈时肯定会新建实例,从而导致数据不一致。而此模式新建的一个单独的栈来管理此活动,多个应用访问时就会共用同一个栈中实例,并不会新建实例了,从而解决了数据不一致的问题。