android activity的4种启动模式

在AndroidMainfest.xml文件配置activity节点时,可以指定Activity的启动模式属性,android:launchModel 属性 ,可以指定四种启动模式:

中文名字是我自己根据他的特称和理解定义的。


分别是:standard  基本启动模式  (默认)

singleTop 栈顶单例启动模式 

singleTask 任务单例启动模式

singleInstace 单实例启动模式

Standard:

android activity的4种启动模式_第1张图片

应用程序中,每启动一个活动,都会在返回栈顶。如果我们为FirstActivity 创建一个按钮,通过Intend启动一个FirstActivity 程序会为我们创建新的Activity 放入栈顶,如图所示。 这种启动模式是默认的。

singleTop

如果在AndroidMainfest.xml 中的FirstActivity android:launchModel指定为singleTop,这时在上一个测试中,由于FirstActivity处于栈顶的位置,程序就不会创建一个新的Activity 。   如果进入了一个SecondActivity ,当SecondActivity处于栈顶的时候,在SecondActivity中通过Intent启动FirstActivity时 ,由于FirstActivity 并未处于栈顶,则会创建一个新的Activity 如图


android activity的4种启动模式_第2张图片


活动处于栈顶的时候,就是单例的。如果活动并未处于栈顶,则就要像standard一样 创建一个新的Activity。正如名字singleTop一样。


singleTask:

会想到,如果要是整个任务中的几个活动都不能重复,该如何设定,sinleTask就是这么一种模式,在启动活动的时候,系统会检查返回栈中的活动实例是否已经存在,如果存在,那个实例上的活动全部弹栈,启动那个活动,不会创建一个新的活动。

如图:

android activity的4种启动模式_第3张图片

个SingleTask名字让我有些疑惑,Task是一些活动的集合,那么一个程序中会有多个Task么,根据我自身的基本意识,觉得程序当中肯定会有多个Task。但是这个模式又是说程序会检查整个返回栈中是否有重复,那么这个名字是否应该定义成singleStack呢。 有些疑惑,初学。


singleInstance

活动是可以被多个应用程序共享,当其他应用程序需要调用本应用程序中的活动的时候,就可以将Activity设置为共享Activity 为这个Activity 单独的创建一个返回栈。这个返回栈是多个应用程序共享的。我们可以通过getTaskId()方法得到当前的返回栈的ID,就可以去区分当前的Activiyt所在的栈是哪个。


上图:

android activity的4种启动模式_第4张图片











参考图书:

《第一行代码》 人民邮电出版社







你可能感兴趣的:(Android_菜鸟成长记)