Android四种启动模式:standard、singleTop、singleTask、singleInstance 。
standard:默认模式,在这个模式下,每次都会创建新的Activity实例,可以有多个实例,允许多个相同实例叠加。
singleTop:可以有多个相同Activity实例,但不允许多个相同Activity叠加。即,如果activity位于栈顶,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。
singleTask:相同的Activity只允许有一个。在这个模式下,如果栈中存在这个Activity的实例就会复用这个Activity,不管它是否位于栈顶,复用时,会将它上面的Activity全部出栈,并且会回调该实例的onNewIntent方法。其实这个过程还存在一个任务栈的匹配,因为这个模式启动时,会在自己需要的任务栈中寻找实例,这个任务栈就是通过taskAffinity属性指定。如果这个任务栈不存在,则会创建这个任务栈。
singleInstance:该模式具备singleTask模式的所有特性外,与它的区别就是,这种模式下的Activity会单独占用一个Task栈,具有全局唯一性,即整个系统中就这么一个实例,由于栈内复用的特性,后续的请求均不会创建新的Activity实例,除非这个特殊的任务栈被销毁了。以singleInstance模式启动的Activity在整个系统中是单例的,如果在启动这样的Activiyt时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。