Activity有四种启动模式
你可以在AndroidManifest.xml中通过给<activity>标签指定android:launchMode来选择启动模式

standard

他是默认的启动模式,在不进行显示指定的情况下,会自动使用这种启动模式。他的操作就是,每次启动一个新的activity都会直接调用onCreate()创建一个新的实例,然后置于返回栈栈顶。
这样的确定是,即便是同一个页面,也可能会产生很多个,然后叠加,产生资源的浪费。

singleTop

解决标准模式的部分问题:他的操作为:在启动Activity时,如果发现该Activity已经处于栈顶时,系统将会直接使用它,而不是创建新的Activity实例。
当然,如果栈顶换了新的activity时,他就会是标准模式。

singleTask

这里的启动模式意味着,该Activity是一个单例模式,在整个返回栈中都只会有这一个。操作:当启动这个Activity时,系统会检查返回栈中是否存在这个Activity的实例,如果不存在,将会创建该实例,如果存在,那么系统会将返回栈中这个Activity之上的所有activity都出栈并销毁,使这个Activity处于栈顶。

singleInstance

他的使用场景:存在多个应用程序都可以共用这个Activity,而前三个启动模式都做不到,因为每个应用程序都有自己的返回栈,同一个Activity在不同的返回栈时,必然会创建不同的实例。
因此该启动方式会有一个单独的返回栈来管理这个Activity。不管哪个应用访问这个Activity都会公用这个返回栈。