1. 默认启动方式:standard
什么配置都不写的话就是这个启动方式。但是会过浪费,每次都会从新创建一个实例,为了优化应该尽量考虑余下三种方式。
2.singleTop
每次扫描栈顶,如果在任务栈顶发现了相同的实例则重用,才会调用onNewIntent()
而不创建新实例,否则新建并压入栈顶。
3.singleTask
设置了singleTask启动模式的Activity,它在启动的时候,会先在系统中查找属性值affinity等于它的属性值taskAffinity的任务存在;如果存在这样的任务,它就会在这个任务中启动,否则就会在新任务中启动。
因此,如果我们想要设置了singleTask启动模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity属性值。如果设置了singleTask启动模式的Activity不是在新的任务中启动时,它会在已有的任务中查看是否已经存在相应的Activity实例,如果存在,就会把位于这个Activity实例上面的Activity全部结束掉,即最终这个Activity实例会位于任务的堆栈顶端中。
简而言之:就是如果栈中有目标activity,则结束目标activity之上的所有activity,让其至于栈顶,如果没有则就会在新任务中启动。
4.sengleInstance
这个的理解可以这么看:在微信里点击“用浏览器打开”一个朋友圈,然后切到QQ再用浏览器开一个网页,再跑到哪里再开一个页面。每次我们都在Activity中试图启动另一个浏览器Activity,但是在浏览器端看来,都是调用了同一个自己。因为使用了singleInstance模式,不同应用调用的Activity实际上是共享的。