一般情况下我们对Activity的生命周期有所了解之外,针对于Activity的启动模式和标志位也需要有一定的了解。Activity作为Android四大组件之首,在我们日常开发中必不可少的,接触最多的组件之一。
Activity的LaunchMode
- 首先Activity为什么需要启动模式?
- 在默认情况下我们 多次启动同一个Activity的时候系统会创建多个实例并把他们放入一个任务栈中我们点击back键之后,Activity会回退,任务栈故名思议就是一种栈结构的数据结构。直到Activity任务栈为空时推出应用。
- Activity的四种启动模式
- standard 标准模式
- 标准模式,这也是系统默认模式,每次启动一个Activity都会重新创造一个实例不管这个实例是否已经存在,被创建的实例的生命周期符合典型情况下Activity的生命周期,他的onCreate、onStart、onResume都会被调用。一个任务栈可以有多个实例,每个实例都可以属于不同的任务栈。
- singleTop 栈顶复用模式
- 栈顶复用模式,在这种模式下,如果新的Activity已经位于任务栈的栈顶那么此Activity就不会被创建,同时他的onNewIntent方法会被回调,通过此方法的参数我们可以获取当前请求的信息,需要注意的是这个Activity的onCreate、onStart不会被系统调用,因为它并没有发生变化,如果新的Activity的实例已经存在并且不再栈顶,那么该Activity仍然会被创建。
- singleTask 栈内复用模式
- 栈内复用模式,这是一种单实例模式,在这种模式下只要Activity在一个任务栈中,那么多次启动Activity都不会被创建,和singleTop一样,系统会调用onNewIntent方法,
- singleInstance 单实例模式
- 单实例模式,是一种加强了的singleTask模式。它除了具有singleTask模式的所有特性以外,还加强了一点,那就是具有此种模式的Activity只能单独的位于一个任务栈中,例如,Activity A是一个singleInstance模式,当A启动后,系统会为它创造一个新的任务栈,然后A独自运行在这个新的任务栈中,由于栈内复用的特性,后续请求均不会创建一个新的Activity,除非这个独特的独有的任务栈被系统销毁。
- standard 标准模式