activity启动模式有四种
1、standard
这个是活动启动的默认模式,系统不会管这个活动在栈中是否存在,每次启动都会创建一个新的实例。
Intent intentSelf= new Intent(MainActivity.this, MainActivity.class);
startActivity(intentSelf);
如上面的自己启动自己,还是会创建的。
2、singleTop
修改为singleTop启动模式,在androidManefist.xml对应的activity中添加android:launchMode=“singleTop”,singleTop启动模式,如果栈顶是该activity,则不会再启动该activity,否则,还是会启动对应的activity。如1中所示的,自己启动自己,如果是singleTop,则不会再创建。如果MainActivity启动了SecondActivity,在SecondActivity再启动MainActivity,则会再创建MainActivity的实例。
3、singleTask
一个栈里只能有一个该activity的实例,当再启动该activity时,如果栈中有该activity的实例,则栈顶的activity都出栈,也就是destory掉。如下图所示:MainActivity时singleTask,MainActivity启动SecondActivity,SecondActivity启动ThirdActivity,ThirdAcitivity启动MainActivity,则调MainActivity的onRestart,SecondActivity和ThirdActivity都destroy了。
4、singleInstance
singleInstance模式,那么系统中只会存在一个此activity,会有一个task放这个activity,当两个以上activity是singleInstance模式,并且都是同一个应用,如果不指定taskAffinity,那么按home键,会导致activity被杀,最先处于后台的activity被杀掉。按下home键时系统会清理最近不活动的和application相同的taskAffinity的所有处于后台的栈,taskAffinity默认与application是同一个。
singleInstance和taskAffinity的区别可看这个文章
https://blog.csdn.net/zy13608089849/article/details/82997140