Activity的四种启动模式

作为基础回顾~

一、Activity的四种启动模式简介

Activity是通过Activity栈来进行管理的。当一个Activity启动时,那么就会根据系统配置来将Activity压入栈中。当Back返回或销毁时,Activity出栈。

如果不指定Activity的启动模式,那么将以默认模式启动。如果要指定启动模式,在AndroidManifest中指定Activity的启动模式。例如:

<activity android:name="com.app.TestActivity" android:launchMode="standard">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

二、四种模式详解

  • standard

standard,标准模式。是Activity的系统默认启动模式。每次启动一个Activity都会创建一个新的实例,不管该Activity的实例是否存在。

  • singletop

singletop,栈顶复用模式。这种模式下,如果启动的Activity就在栈顶,那么复用栈顶的Activity,并且调用onNewIntent()方法。通过这个方法,可以取到当前请求的数据。如果启动的Activity已存在,但是不在栈顶,那么就会重新创建新的实例。

  • singletask

singletask,栈内复用模式。在这种模式下,是单实例模式,在这种模式下,只要启动的Activity在任何一个任务栈中存在,就不会重新创建新的实例。和singletop一样,会调用onNewIntent方法。

那么在启动的时候,先找有没有实例在Activity栈中,如果有那么就会将要启动的Activity置于栈顶,并且调用onNewIntent方法。如果没有那么就会创建新的实例压入栈中。

需要注意的是,singletask默认是cleartop,会将栈内将要启动的Activity实例上面的Activity全部出栈。使启动的Activity实例位于栈顶。

  • singleInstance

singleInstance,单个实例模式。这种模式下,Activity只能单独的在一个任务栈中存在。当启动一个Activity启动模式为singleInstance时,系统会新建一个任务栈,该实例压入栈中,仅有该实例存在。

Neil Liu wechat
个人微信,欢迎交流
让我感受下知识的力量~