首先解释下任务栈:
每个应用都有一个任务栈,是用来存放Activity的,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序;比如Activity1–>Activity2–>Activity3,则任务栈为:
一、standard启动模式:
该启动模式是默认的启动模式,在每次启动一个Activity时会新创建一个Activity对象,无论要启动的Activity是否存在。如图:
二、singleTop启动模式:
在当前任务栈中,判断栈顶是否存在当前的Activity,如果是,就直接使用,如果不是,再创建新的Activity放入栈顶。如图:
三、singleTask启动模式:
在当前任务栈中,判断栈顶是否存在该Activity,如果不存在,则创建一个新的Activity入栈, 如果存在会把该Activity之上的所有Activity清除出栈,显示当前Activity。如图:
四、singleInstance启动模式:
新创建一个任务栈,放入新创建的Activity,该任务栈只允许存在同一个Activity实例,如果已存在需要的Actiity,那么会切换到存在该Activity的任务栈。如图:
下面说下设置启动模式的方法:
1.在AndroidManifest.xml文件中设置,在所需要启动的Activity中设置:launchMode,有四种,上文已述。
<activity
android:name=".MainActivity6"
android:label="@string/title_activity_main6"
android:launchMode="standard">
</activity>
2.在代码中设置:下示代码是一个按钮的事件方法,利用Intent对象的setFlags()方法来传递参数从而设置启动模式
public void startFlags(View view) {
Intent intent = new Intent(this, MainActivity6.class);
//设置Activity的启动模式
//Intent.FLAG_ACTIVITY_NEW_TASK在新的任务栈中启动Activity,如果有,在本任务中启动。类似于standard模式
//Intent.FLAG_ACTIVITY_CLEAR_TASK;类似于singleTask启动模式
//Intent.FLAG_ACTIVITY_CLEAR_TOP;类似于singTop启动模式
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
最后说明,图例全部借用自meizixiong的博客。
小白之论,大神勿喷。
PS:哪个大神解释下singleInstance模式到底如何启动,网上的说法不一,在此拜谢~