Android四种启动模式

Task

使用栈保存Actiivty,先进后出。

standard 标准模式

不管是否存在,都会创建实例。

启动–>Activity A—>Activity B—->Activity A—>Activity B—>Activity A—>Activity B—>Activity A

此处输入图片的描述

跳转时没有finish,不会触发onDestroy,按回退键则是移除actiivty。

singletop 栈顶复用模式

如果当前Activity在栈顶,如果跳其他Activity会创建Actiivty和standard 标准模式一样;如果是跳本身当前Actiivty则不会新建实例,会调用onNewIntent方法。

此处输入图片的描述

点击跳本身页面;没有创建实例。点击跳转其他页面,标准启动模式会上个栈顶复用Actiivty创建实例。

singletask 栈内复用模式

使Activity在整个应用程序中只有一个实例。每次启动Activity时系统首先检查栈中是否存在当前Activity实例,如果存在则直接复用,并把当前Activity之上所有实例全部出栈。

应用:可以将mian页面设置为singletask模式,将splashActiivty finish和LoginActiivty finish,将MainActivity作为栈底;可以一键退出应用。

此处输入图片的描述

singleinstance 单例模式

该模式的Activity会启动一个新的任务栈来管理Activity实例,并且该实例在整个系统中只有一个。无论从那个任务栈中启动该Activity,都会是该Activity所在的任务栈转移到前台,从而使Activity显示。主要作用是为了在不同程序中共享一个Activity。

此处输入图片的描述

如果把singleinstance的Activity的finish了,那么所有singleinstance的Activity都没有,实际上它是新栈中一个全局实例,只有一个。

manifest.xml清单文件

<activity
    android:name=".LauncherActivity"
    android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity android:name=".standard.MainActivity" />
<activity android:name=".standard.Main2Activity" android:launchMode="standard" />


<activity android:name=".singletop.Main3Activity" android:launchMode="singleTop"/>
<activity android:name=".singletop.Main4Activity" />


<activity android:name=".singletask.Main5Activity" android:launchMode="singleTask"/>
<activity android:name=".singletask.Main6Activity" />


<activity android:name=".singleInstance.Main7Activity"  android:launchMode="singleInstance"/>
<activity android:name=".singleInstance.Main8Activity"/>

代码下载

Demo