安卓Acitivity的启动模式

活动的四大启动模式

Ps:除了standar模式外,其他启动模式都要在AndroidManifest.xml中设置 android:lauchMode的值

  安卓活动的启动模式(LaunchMode)有以下四种:

 1. standard  活动的默认启动模式,不需要在AndroidManifest.xml中设置 android:lauchMode的值

standard模式 没当你启动一个新的活动,无论这个活动是否妇存在于活动的返回栈中,都将重新创建该活动的一个实例,并入栈

举个栗子:Intent intent = new Intent(FirstActivity.this,FirstActivity.class) 虽然看起来有些荒唐,但是我们只是为了演示standard,所以不要太在意这些无关紧要的东东,然后startActivity(intent),将这个intent添加到FirstActivity的按钮点击事件中,那么每次点击都会创建一个活动的实例并在返回栈中入栈,尽管他是相同Activity,所以standard 并不是一个 好的选择。

 2. singleTop  相比较standard模式,有些情况会不合理,明明已经在栈顶了,为什么再次启动的时候还要重新创建一个新的活动实例呢,没关系,android支持我们自定义的活动启动模式,比如说使用singleTop ,当然singleTop也不是那么完美😂,当活动的启动模式指定为singleTop时,当当前返回栈的栈顶已经是该活动,那么会直接调用该活动,不会去重新创建一个该活动的新的实例。这样就解决了standard模式中自己启动自己的却创建新的活动实例的问题,but 并不是完全健全的,假设我们 在FirstActivity中启动SecondActivity,然后又在SecondActivity中启动FirstActivity,那么还是会重新的创建新的活动实例,因为返回栈的栈顶总是当前的活动实例。

 3. 正如我们上面说到,singleTop并不是完美的,他只能很好的解决重复创建栈顶活动的问题,但是对于返回一个已经使用过的活动时,singleTop的选择是重新创建此活动的实例,那么我们的目的是为了让某个活动在整个应用程序中只存在一个实例,这个时候我们就需要使用

singleTask,当活动启动模式为singleTask时,每次启动该活动系统首先会在返回栈中检查是否存在该活动的实例,如果存在就直接使用该实例,并把在这个实例之上的所有活动统统出栈,使得 该活动 成为返回栈的栈顶活动(也就是当前活动),如果不存在 那么创建该活动的新实例。

显然,singleTask启动模式相比较standard和singleTop来说更符合我们的预想。

 4. singleInstance 这个相对来说是 四种启动模式中最复杂的了,当活动指定为singleIntance启动模式时,系统会启动一个新的返回栈来管理这个活动,这样做的意义是,可以与其他应用共享这个活动实例,如果是其他三种模式,那么在不同的返回栈中必定需要创建不同的活动实例,那么是不可能实现与其他应用程序共享该活动实例的,而使用singleIntance模式,会有一个单独的返回栈来管理这个活动,无论是哪个应用程序都可以访问这个活动,都公用同一个返回栈,也就解决了 更多场景下 的活动实例共享问题。(这里,书上说:其实如果singleTask模式指定了不同的taskAffinity,也会启动一个新的返回栈)

 

好了,暂时关于 活动启动模式的姿势点 就到这里了。

 

 

 

posted @ 2017-05-25 10:05  昕无旁骛  阅读(249)  评论(0编辑  收藏  举报