理解Activity启动模式

Activity启动模式一共四种

  • standard
  • singleTop
  • singleTask
  • singleInstance

一共四种。

怎么修改 activity 的启动模式

在清单文件中 的 activity 的标签中添加属性:

    android:launchMode="启动模式"

activity stack:activity栈
android 中的 activity 的启动是受activity栈所管理的,因为存在 activity 栈,所以启动模式才有意义

standard模式

activity 的默认模式,即不给 activity 设置上面的 launchMode属性,就会按照默认的启动模式启动

特点

启动一个 activity ,就会往 activity栈中添加一个实例,比如activity A 跳转到B ,B 跳转到C ,C 跳转到D,D 跳转到A ,A 跳转到B

那么,在activity栈 内就会 从底到顶排列ABCDAB

懒得画图:
B
A
D
C
B
A
这样样子的,那么栈的特性是 “后进先出”,所以当我们在这个时候点击返回键的时候,B A D C B A 依次退出,最终 程序退出

singleTop 模式

按照上方所说的,我们在清单文件中添加

  activity:lauchMode="singleTop"

就可以让当前的Activity设置成为 singleTop模式

特点

singleTop模式:在创建实例时,如果当前实例在Activity栈的栈顶,那么新的实例将不会创建,而是会复用栈顶的这个实例,此时会调用这个栈顶实例的 activity中的 onNewInstance()方法。

举个例子,现在activity C是 singleTop 模式,A B是普通模式

那么现在 A跳转到B ,B跳转到C,C再跳转到C

这个时候,在C 跳转到C的时候 ,新的C 不会再创建,而是会复用当前的C ,并且调用C里面的onNewIntance()方法
activity栈的模式就是这样的
C
B
A

但是如果相同的案例,如果ABC都是standard模式,那么
activity栈的模式就是
C
C
B
A

singleTask模式

按照上方所说的,我们在清单文件中添加

activity:lauchMode="singleTask"

就可以让当前的Activity设置成为 singleTask模式

特点

在创建实例时,会在activity栈内 遍历一遍,看看是否有当前activity的实例,如果有,则复用,并且把其他在这个实例上面的 activity实例退出。如果没有,则会创建一个新的实例并进入到这个activity栈中

举个例子

现在activity A是 singleTop 模式,B C是普通模式

现在点击A 跳转B ,B跳转到C,C再跳转到A,那么在Activity栈中是这样的过程

A跳B:
B
A
B再跳C:
C
B
A
再从C跳到A:
A

singleInstance模式

按照上方所说的,我们在清单文件中添加

activity:lauchMode="singleInstance"

就可以让当前的Activity设置成为 singleInstance模式

特点

在创建singleInstance实例的时候,会重新开启一个activity栈,并且将该实例放到这个栈中。

举个例子
C是SingleInstance模式

现在A跳到B,B跳到C,那么A和B 会在一个activity栈,而在B跳转到C的时候,由于C是singleInstance模式,所以会开启一个新的activity栈:
所以此时,activity栈会是这个样子的

第一个栈:
B
A
第二个栈:
C

总结

一般我们只是用standard模式。

你可能感兴趣的:(理解Activity启动模式)