欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Activity的启动模式

程序员文章站 2022-06-03 10:23:10
Android系统采用任务栈的方式来管理Activity实例。 栈是后进先出的数据结构。通常一个应用程序对应一个任务栈,默认情况下,每启动一个Activity都会入栈,处于栈顶位置。用户操作的永远都是栈顶的Activity。 Activity可以层叠摆放,每启动一个新的Activity都会覆盖在原A ......

 

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模式。