今天了解了一下Activity的启动模式。下面罗列一下我今天学到的知识点。首先启动模式分为四种,分别是standard,singleTop,singleTask,singleInstance,我们可以在AndroidManifest.xml中通过<activity>标签指定android:launchMode属性来选择启动模式。下面各自介绍一下:首先说一下standardstandard是android默认的启动方式。不进行显式指定的情况下,所有活动都会自动使用 这种启动模式。我们知道android是使用返回栈来管理活动的,在这个模式下,每当启动一个新的活动,它就会在返回栈中入栈,并会处于站顶的位置(栈是先入后出的,举个简单 粗暴的例子,我们把饼一张张重叠在一起,我们总是会从最上面那张开始吃,这个例子不知是否恰当)这个模式最大的缺点就是系统不会在乎这个活动是否已经在返回栈中存在,每次启动活动都会创建该活动的一个新的实例。且每次创建后都会在栈顶。如图所示:从图上可以看出,当我们想退出程序时,得按两次返回键我们再来看看singleTopsingleTop可以弥补standard缺点当活动的启动模式 指定为singleTop,在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用 它,不会再创建新的活动实例。
首先,修改AndroidManifest.xml中FirstActivity的启动模式, 如下所示:
<activity
android:name=".FirstActivity" android:launchMode="singleTop" android:label="This isFirstActivity" >
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
然而这个模式也是有弊端的,singleTop只能判断栈顶,若此活动没有在栈顶,他还是重新创建该活动的。
如下图:当在second页面中再次启动first时,发现此活动并没有在栈顶,所以又重新创建了first活动,由此可见他只能检查在栈顶是否需要创建,然而这个模式也不是很理想
再来看看singleTasksingleTask可以很好的弥补singleTop的缺点,他可以在整个应用活动中,检查是否需要创建。当活动启动模式是singleTask时,系统会首先在返回栈中检查是否存在该活动的实例。若是没有则创建,如果发现已经存在,那么会把在这个活动之上的所有活动统统让其出栈。照例首先,修改AndroidManifest.xml中FirstActivity的启动模式, 如下所示:
<activity
android:name=".FirstActivity" android:launchMode="singleTask" android:label="This isFirstActivity" >
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
下面来看看singleInstance
singleInstance是比较复杂的模式,和上面三种不一样,若是系统指定为singleInstance,则是创建一个返回栈来管理
这种模式解决了程序与程序间共享的问题。
如下图所示:
当我们在AndroidManifest.xml中把SecondActivity指定为此模式时
thirdActivity和Firstactivity是在同一个栈中,而secondActivity是单独一个栈中时候,这时我们首先打开FirstActivity,依次打开secondActivity和ThirdActivity。我们处于ThirdActivity活动界面时候按返回键,会依次看到:FirstActivity活动界面,然后SecondActivity。这是为什么呢?因为ThirdActivity和FirstActivity是属于同一个栈,ThirdActivity出栈时,理所应当会看见FirstActivity。当FirstActivity也出栈时,相当于整个返回栈A没有了,所以会看见返回栈B的活动界面
这篇文章只是浅谈,若语言不严谨,请见谅。
浅谈Activity启动模式
最新推荐文章于 2019-05-07 20:09:47 发布