为什么要说activity的启动模式呢?这得先从task任务栈说起。task是一个栈结构的容器,可以放置多个Activity实例。通常默认情况下启动一个app会生成一个默认的task栈去存放activity的实例,但是有时候可能我们需要在另一个任务栈存放activity实例,或者需要activity只有一个实例,或者为了避免重复创建大量的activity等等一些需求,这就需要设置activity的启动模式以及设置Intent的flag.今天先总结下activity的四种启动方式。activity有四种启动方式,分别为:standard、singleTop、singleTask、singleInstance。设置方式为在AndroidManifest.xml中进行配置。标签熟悉为launchMode.
<activity
android:name=".activity.MainActivity"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize" />
Standard
默认为此启动模式,不配置时即默认为此启动模式。在此模式下,startactivity时系统会在默认task栈中创建一个新的实例,该实例与栈中是否已有实例无关。在这种模式下,同一个task任务栈中可以同时存在多个相同activity的实例,每个实例有自己的空间与id。
SingleTop
该模式逻辑为:若task栈顶已经是要启动的activity实例,则不重新创建activity实例,若task栈顶不是要启动的activity实例,则重新创建一个activity。在这种模式下,同一个任务栈中可以存在多个activity实例。
SingleTask
该模式逻辑为:在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若已存在,则会把task栈中在其实例之上的其它Activity destory掉并调用它的onNewIntent方法,此时如果点击back键,应用将会退出。
singleInstance
该模式逻辑为:该activity实例只存在一个单独的task栈,该单独的任务栈中只有其一个activity实例,该task栈 与启动该activity所在的task栈并不是同一个。
具体的大家可以通过代码去尝试一下,实践才是检验真理的唯一标准。代码中可以通过getTaskId()获取该activity所在任务栈Id用于对比。