Activity的启动模式:

1.standard : 标准模式,每次打开都会新建一个实例,而且会处于启动当前activity的activity的任务栈中

2.singleTop : 栈顶复用模式,在这种模式下,如果新的activity已经位于任务栈的栈顶,那么此activity不会被创建,同时它的onNewIntent会被调用,此时它的生命周期不会被调用。

3.singleTask :栈内复用模式,这是一种单实例模式,只要activity在一个栈中存在,那么多次启动此activity都不会被重新创建,并且调用其onNewIntent。当一个activity具有这种模式,系统会首先寻找当前activity是否在当前任务栈中是否存在当前activity 的实例,如果没有则重新创建

4.singleInstance : 单实例模式。这是一种加强的singleTask模式,它除了具有singleTask模式的所有特性之外,还加强了一点,那就是具有此种模式的activity只能单独的位于一个任务栈中,换句话说,比如Activity A 是singleInstance模式,当A启动后,系统会为它创建一个新的任务栈,然后A独自在这个新的任务栈中,由于栈内的复用性,后续的请求均不会创建新的Activity,除非这个独特的任务栈被系统销毁了。

此外,对于singleTask模式的Activity,还可以通过TaskAffinity来指定Activity启动所在的任务栈的名字,未指定情况下会出现在和包名相同的任务栈中。

可通过一下两种方式来指定activity 的启动模式:

1.<activity android:name=".Main2Activity" android:launchMode="singleTop">

2.Intent intent = new Intent(this,Main2Activity.class);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);

此外增加FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS这个标记的Activity不会出现在历史的Activity的列表中,等同于在XML中指定Activity的属性android:excludeFromRecents=”true”。

本文地址: http://www.yppcat.top/2019/02/20/activity启动模式/