Activity启动模式
1、设置启动模式
一般地,我们可以直接在AndroidManifest.xml 标签的一个属性中设置launchMode,如下:
<activity
android:name=".ExampleActivity"
android:label="singleTask launchMode"/>
2、四种动模式认识
- standard:标准模式 系统的默认模式,每次启动一个Activity都会重新创建一个新的实例,不管这个实例是否已经存在。被创建的实例的生命周期符合典型情况下Activity的生命周期,它的onCreate,onStart,onResume都会被调用。这是一种典型的多实例实现,一个任务栈中可以有多个实例,每个实例可以属于不同的任务栈。在这种模式下,谁启动了这个Activity,那么这个Activity就会运行在启动它的那个Activity的任务栈中。
- singleTop:栈顶复用模式 如果新的Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,同时它的onNewIntent方法会被回调,通过此方法的参数我们可以取出当前请求的信息。需要注意的是,这个Activity的onCreate,onStart不会被系统调用,因为它没有发生改变。如果新Activity的实例已存在但不是位于栈顶,那么新Activity仍然会被重建。
- singleTask:栈内复用模式 这是一种单实例模式,在这种模式下,只要Activity在一个栈中存在,那么多次启动Activity都不会重新创建实例,和singleTop一样,系统也会回调其onNewIntent。详细来说,当一个具有singleTask模式的Activity请求启动后,系统首先会寻找是否存在这个Activity想要的任务栈,如果不存在,就重新创建一个任务栈,然后创建这个Activity的实例后放到栈中。如果存在这个Activity所需的任务栈,这时候看栈中是否存在这个Activity的实例,如果有实例存在,那么系统就会把这个Activity调到栈顶并调用它的onNewIntent方法,如果实例不存在,就创建这个Activity的实例并压入栈中。
- singleInstance:单实例模式 这是一种加强的singleTask模式,如果某个Activity是singleInstance模式,当这个Activity启动以后,系统会为它创建一个新的任务栈,然后Activity独自在这个新的任务栈,由于栈内复用的特性,后续的请求均不会创建新的Activity,除非这个独特的任务栈被系统销毁了。