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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值