Activity启动模式
启动模式有四种,分别是:standard、singleTop、singleTask、singleInstance,可以在AndroidManifest.xml文件中通过给<Activity>标签指定android:launchMode属性来选择启动模式。
1. standard
standard是活动默认的启动模式,在不进行显示指定的情况下,所有活动都会自动使用这种启动模式。Android是使用返回栈来管理活动的,在standard模式下,每当启动一个新的活动,它就会在返回栈中入栈,并处理栈顶的位置。对于使用standard模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。
例如:应用启动显示的活动是A,A中启动了B,B中启动了C,活动A、B、C的启动模式都是standard模式的,这时候你如果想退出这个应用,需要点击三次Back键才可以。
同样的,如果我们在活动A中,点击按钮Button启动了活动A,然后再点击按钮Button,又启动了A,这时候返回栈中有三个活动A,需要点击三次Back键才能退出应用。
开启几个关闭几个
2. singleTop
使用singleTop模式时,在启动活动的时候,如果返现返回栈的栈顶已经是该活动,则认为可以直接使用,不会再创建新的该活动的实例。
例如,系统默认启动了活动A,在活动A中,点击按钮Button启动了活动A,然后再点击按钮Button,又启动了A,这时候返回栈中其实仍旧只有一个活动A,我们只需要点击一次Back键就能退出应用,活动A是singleTop模式的。
同样的,应用中有A、B两个活动,它们的启动模式都是singleTop,应用启动A,然后A启动了B,B又启动了A活动,这时候返回栈中其实有两个A,一个B,我们需要点击三次Back键才能退出应用。
顶部允许有一个实例栈
3. singleTask
使用singleTask模式时,每次启动活动的时候,系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在该活动的实例,直接使用该实例,并把这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。
例如,应用默认启动了活动A,活动A是singleTask模式的,然后A启动了B,B启动了C,C又启动了A,这时候返回栈中其实只有一个A,B、C都已经被出栈,只需要点击一次Back键就可以退出应用。
在栈中只允许有一个实例,以前的会清空
4. singleInstance
使用singleInstance模式的活动,会有一个单独的返回栈来管理这个活动,一般来说,这种模式是可以用来实现其他应用程序和我们的程序可以共享这个活动的实例的,不管是哪个应用程序来访问这个活动,都共用的同一个返回栈。
例如,应用默认启动了活动A,A启动了活动B,活动B是singleInstance模式的,然后活动B启动了C,我们点击Back键,会从C跳转到活动A,因为A和C在一个返回栈,而B是另一个返回栈,在点击Back键,A跳到了B,再点击Back键,退出程序。
整个手机中只有一个实例存在,并且运行在自己单一栈中