activity有四种启动模式, standard、 singleTop、 singleTask、signleInstance
以上是按启动模式的复杂程度来排序的,下面依次做介绍
standard : activity默认的启动方式,activity每次被启动都会创建一个新的实例
singleTop : 如果被启动的activity在当前任务栈顶,则只调用activity实例中的onNewIntent()方法,否则创建新的实例
singleTask : 如果当前任务栈中存在要被启动的activity实例,则执行实例的onNewIntent()方法,并将它以上的所有activity全部销毁。如果当前任务栈中不存在activity的实例,则创建。
singleInstance : 该启动模式对应的activity会在一个新的任务中进行实例化。如果已经存在,则执行onNewIntent()方法。
前面介绍的是activity四种启动模式的基本用法。接着介绍Activity的TaskAffinity对activity启动模式的影响。
TaskAffinity:意思是亲和度,应用中每个activity都有一个TaskAffinity,默认为包名,也可以在activity标签中进行自定义。
将activity的启动模式设为singleTask,如果没有重新定义taskAffinity,那么在当前任务栈中创建实例,否则,在新的任务栈中创建实例
将activity的启动模式设为singleInstance,如果taskAffinity与当前包名一致,则由该activity启动的activity将在新的任务栈中创建实例
测试代码地址:https://github.com/tb-yangshu/android_blog_source/tree/master/TestAndroidLauchMode