Activity的启动模式

Acitivty的启动模式一共有四种
  • standard
  • singleTop
  • singleTask
  • singleInstance
使用方式有两种
方式一:

AndroidManifest文件中android:launchMode=" "声明

<activity
    android:name=".MainActivity"
    android:launchMode="standard">
activity>
方式二:

代码中动态声明 intent.setFlag()

Intent intent = new Intent(SecondActivity.this, FirstActivity.class);
//声明之后FirstActivity的启动模式即为singleTop模式
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
1.standard模式

Activity默认的启动模式就是standard,startActivity跳转到一个Activity都会实例化一个新的Activity加入栈中

2.singleTop栈顶模式

假如有Activity分别为A、B,A为singleTop模式,B为standard模式,A最先入栈位于栈顶。

点击A中的一个Button跳转到A,此时因为栈内已有A的实例且A位于栈顶,所以直接复用已存在的A,不再会实例化一个新的A实例,栈内只有一个A的实例,此时按返回按钮会直接退出程序。

另一种情况,点击A中的一个Button跳转到B,此时会实例化一个B实例加入栈内,B中也有一个Button按钮,点击B中的按钮跳转到A。此时因为栈内已有一个A的实例,但该实例不位于栈顶,所以还是新实例化一个A加入栈内。此时栈内有三个实例,从栈底到栈顶的顺序为A-B-A。

所以栈顶模式就是 如果栈内有已经存在的Activity实例,且该实例位于栈顶,那么将不再实例化新的Activity,否则和standard模式一样,每次都会实例化一个新的实例。

3.singleTask模式

假如有Activity分别为A、B,A为singleTask模式,B为standard模式,A最先入栈位于栈顶。

点击A中的一个Button按钮跳转到B,此时会实例化一个B的实例加入栈内,B中也有一个按钮,点击按钮跳转到A。此时栈内已有一个A的实例对象,此时会将位于该对象之上的栈顶元素都移除出去,复用该实例对象。因此栈内最后只剩下A的实例化对象。

4.singleInstance模式

该模式会启动一个新的栈保存对象。
假如有Activity分别为A、B,B为singleInstance模式,A为standard模式,A最先入栈位于栈顶。

点击A中的一个Button按钮跳转到B,此时会实例化一个B对象放置到一个新的栈内,B中有一个按钮,点击按钮跳转到A,因为A为standard模式会再实例化一个A,新实例化出来的A对象不会加入到B的栈内,而是加入到之前的栈,B总是独占一个栈。

点击返回按钮,退栈的顺序为 栈顶A-栈底A-新栈的B

你可能感兴趣的:(Android,Activity启动模式)