Android Activity的启动模式

 

Android系统采用任务栈的方式来管理Activity实例。

 

栈是后进先出的数据结构。通常一个应用程序对应一个任务栈,默认情况下,每启动一个Activity都会入栈,处于栈顶位置。用户操作的永远都是栈顶的Activity。

 

Activity可以层叠摆放,每启动一个新的Activity都会覆盖在原Activity之上(入栈),单击返回按钮,最上面的Activity会被销毁,下面的Activity重新显示。

 

 

 

Activity有4种启动模式:

1、standard模式

上面介绍的模式就是standard模式。standard模式是Activity默认的启动模式。每启动一个Activity就在栈顶创建一个新的实例。

闹钟通常采用此种模式。

 

2、singleTop模式

如果有时候satndard模式并不合理,比如当前Activity已处于栈顶,再次启动此Activity会重新创建实例,不会直接复用。

singleTop顾名思义,栈顶单例。

将某个Activity的启动模式设置为singleTop,启动此Activity时,会先检查栈顶是否是此Activity的实例,如果是,则直接复用,如果不是,才创建实例。

浏览器的书签通常采用此种模式。

 

3、singleTask模式

singleTop模式有一定的缺陷,当栈中有此Activity的实例,但未处于栈顶时,仍会创建实例,栈中可能会存在此Activity的多个实例。

singleTask,顾名思义,任务栈中只有一个实例。

启动某个Activity时,会先检查任务栈中是否有该Activity的实例,有就直接复用(把前面所有的Activity出栈),没有才创建并入栈。

浏览器的主界面通常采用此模式。

 

4、singleInstance模式

会启动一个新的任务栈来管理当前程序中singleInstance模式启动的Activity,在Android系统中,该Activity只有一个实例。

这种模式主要是为了,在不同程序间共享同一个Activity实例。

启动Activity时,若Android系统中不存在该Activity的实例,则创建并入栈;若已存在,不管此实例位于哪个程序的哪个任务栈中,系统都会把该任务栈转移到前台,显示该实例。

来电界面通常使用此模式。

 

 

 

可在AndroidManifest.xml文件对应的 <activity />元素中用 launchMode属性 指定启动模式:

1  <activity
2             android:name=".Activity2"
3             android:label="@string/title_activity_2"
4             android:theme="@style/AppTheme.NoActionBar"
5             android:launchMode="singleTask">   <!-- 指定此Activity的启动模式-->
6 </activity>

缺省时默认为standard模式。

 

Android Activity的启动模式

全文结束