Activity四种启动模式说明

1,standard标准模式:

每次启动一个Activity都会重新创建一个实例,即调用Activity创建时的生命周期方法onCreate,onStart,onResume;被启动的Activity会自动添加到启动它的Activity的任务栈中,因此用ApplicationContext启动standard模式的Activity时会报错(Context没有所谓的任务栈)

2,singleTop栈顶复用模式:

新启动的Activity已经位于任务栈的栈顶,那么此Activity将不会被重建,而是会回调其onNewIntent方法,如果新启动的Activity不是位于栈顶,此时将重新创建新的Activity实例并添加到栈顶.

3,singleTask栈内复用模式:

这是一种简单的单例模式,这种模式下只要被启动的Activity位于栈内,那么无论它是否位于栈顶都不会重新创建新的Activity实例,而是直接将其调回到栈顶并回调其onNewIntent方法,如果在其上有其他Activity的时候会将这些Activity进行出栈处理

4,singleInstance单实例模式:

这是一种加强的singleTask模式,除了具有singleTask的特点外还加了一点,具体此模式的Activity会单独位于一个独立的任务栈,如ActivityA为singleInstance启动模式,当A启动后,系统会单独为其建一个任务栈,A将独自位于这个任务栈中,以后的请求均不会创建新的Activity直至这个任务栈被销毁.


任务栈的指定:

AndroidMenifest中设置

 设置Activity所属栈名
android:taskAffinity标签设定了栈名,此标签只在两种情况下起作用,一种为singleTask启动模式下的Activity,另一种为配合andriod:allowTaskReparenting使用;

allowTaskReparenting为ture时,当应用A启动了应用B的某个Activity,当应用B也被启动后,此Activity会直接从应用A的任务栈转移到应用B的任务栈中

Activity启动模式还可以再代码中进行设置:

Intent intent = new Intent();
        intent.setClass(this,TestActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
代码设置会优先于清单文件设置

你可能感兴趣的:(Activity四种启动模式说明)