Android 中的 Activity Launch Mode 详解

Android 中的 Activity 有几种比较重要的启动模式,Standard\SingleTop\SingleTask\SingleInstance , 每一种启动模式有不同的使用场景, 网上也有许多分析这个的文章, 这里我以 Demo 的模式, 从 Activity 栈的角度来展示不同启动模式下的 Activity 的行为.

Activity 栈是一个先进后出的数据结构, 各位可以关注在每一步操作之后, 栈内容那一栏 , 可以更好地帮助理解不同的启动模式.

Demo 比较简单, 我也放到了 Github 上 , [https://github.com/xiangjiana/emmmmm
](https://github.com/xiangjiana/emmmmm
) , 有兴趣的可以自己跑一下 , 看看结果 , 只需要修改 StandardActivity 里面的跳转 Activity 就可以了.

Standard 标准模式

android:launchMode="standard"

最基本的模式,每次启动都会创建一个新的 Activity

// 1. 启动 Activity
MainActivity

//栈内容
com.example.launchmodetest/.MainActivity

-------------------------------------------------------------------
// 2. 启动 StandardActivity
MainActivity -> StandardActivity

//栈内容
com.example.launchmodetest/.StandardActivity
com.example.launchmodetest/.MainActivity

-------------------------------------------------------------------
// 3. 启动 StandardActivity
MainActivity -> StandardActivity ->  StandardActivity

//栈内容
com.example.launchmodetest/.StandardActivity
com.example.launchmodetest/.StandardActivity
com.example.launchmodetest/.MainActivity

SingleTop 栈顶复用模式

android:launchMode="singleTop"

如果当前 Activity 已经在栈顶,那么其 onNewIntent 会被调用;否则会重新创建 Activity

测试1 : SingleTopActivity 不在栈顶
// 1. 启动 MainActivity
MainActivity

//栈内容
com.example.launchmodetest/.MainActivity

-------------------------------------------------------------------
// 2. 启动 StandardActivity
MainActivity -> StandardActivity

//栈内容
com.example.launchmodetest/.StandardActivity
com.example.launchmodetest/.MainActivity

-------------------------------------------------------------------
// 3. 启动 SingleTopActivity
MainActivity -> StandardActivity ->  SingleTopActivity
//栈内容
com.example.launchmodetest/.SingleTopActivity
com.example.launchmodetest/.StandardActivity
com.example.launchmodetest/.MainActivity

-------------------------------------------------------------------

// 4. 启动 StandardActivity
MainActivity -> StandardActivity ->  SingleTopActivity -> StandardActivity
//栈内容
com.example.launchmodetest/.StandardActivity
com.example.launchmodetest/.SingleTopActivity
com.example.launchmodetest/.StandardActivity
com.example.launchmodetest/.MainActivity

-------------------------------------------------------------------
// 5. 启动 SingleTopActivity:
MainActivity -> StandardActivity -> SingleTopActivity -> StandardActivity -> SingleTopActivity
//栈内容
com.example.launchmodetest/.SingleTopActivity
com.example.launchmodetest/.StandardActivity
com.example.launchmodetest/.SingleTopActivity
com.example.launchmodetest/.StandardActivity
com.example.launchmodetest/.MainActivity

//这里由于第三个 SingleTopActivity 不在栈顶,栈顶是 StandardActivity ,所以启动新的 SingleTopActivity 时会重新创建 SingleTopActivity

测试2 : SingleTopActivity 在栈顶

// 1. 启动 MainActivity
MainActivity
//栈内容
com.example.launchmodetest/.MainActivity

-------------------------------------------------------------------
// 2. 启动 StandardActivity
MainActivity -> StandardActivity
//栈内容
com.example.launch
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值