Activity的四种启动模式

1.standard

         默认模式,可以不用写配置。在这个模式下,每次激活 Activity 时都会创建 Activity 实例,并放入回退栈中(栈顶).该 activity 可以被实例化多次,各个实例可以属于不同的 task,一个 task 中也可以存在多个实例。

例如:

若我有一个Activity名为A1, 上面有一个按钮可跳转到A1。那么如果我点击按钮,便会新启一个 Activity A1叠在刚才的A1之上,再点击,又会再新启一个在它之上……点 back 键会依照栈顺序依次退出。


2.singleTop

        如果在回退栈的栈顶正好存在该 Activity 的实例,就重用该实例(会调用实例的 onNewIntent()),否则就会创建新的实例并放入栈顶(注,即使栈中已经存在该 Activity 的实例,只要不在栈顶,都会创建实例),即:不允许多个相同 Activity 叠加,保证 task 栈顶部有且只有一个 activity 实例对象
例如:
若我有两个Activity名为B1,B2,两个 Activity 内容功能完全相同,都有两个按钮可以跳到B1或者B2,唯一不同的是B1为standard,B2为singleTop。
若我意图打开的顺序为B1->B2->B2,则实际打开的顺序为B1->B2(后一次意图打开B2,实际只调用了前一个的 onNewIntent 方法)
若我意图打开的顺序为B1->B2->B1->B2,则实际打开的顺序与意图的一致,为B1->B2->B1->B2。和默认启动没区别..


3.singleTask

       如果在栈中已经有该 Activity 的实例,就重用该实例(会调用实例的 onNewIntent ())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。

即:保证 task 栈中有且只有一个 activity 实例对象


4.singleInstance

        在一个新栈中创建该 Activity 实例,并让多个应用共享该 Activity 实例。一旦这种模式的 Activity 实例存在于某个栈中,任何应用再激活这个 Activity 时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。此启动模式和我们使用的浏览器工作原理类似,在多个程序中访问浏览器时,如果当前浏览器没有打开,则打开浏览器,否则会在当前打开的浏览器中访问。此模式会节省大量的系统资源,因为他能保证要请求的 Activity 对象在当前的栈中只存在一个。

       “launchMode”设置为”singleInstance”的 Activity 总是在栈底,  只能被实例化一次,  不允许其它的 Activity 压入”singleInstance”的 Activity 所在 Task 栈,    即整个  Task 栈中只能有这么一个 Activity。

        注意: 虽然 activity 启动了一个新的 task,但用户仍然可以用回退键返回前一个 task。
即:只有一个实例,并且这个实例独立运行在一个 task 中,这个 task 只有这个实例,不允许有别的 Activity 存在。
       例如:程序有三个ActivityD1,D2,D3,三个 Activity 可互相启动,其中D2为singleInstance模式。那么程序从D1开始运行, 假设D1的taskId为200,那么从D1启动D2时,D2会新启动一个task,即D2与D1不在一个task中运行。假设D2的taskId为 201,再从D2启动D3时,D3的taskId为200,也就是说它被压到了D1启动的任务栈中。
       若是在别的应用程序打开D2,假设Other的taskId为200,打开D2,D2会新建一个task运行,假设它的taskId为201,那么如果这 时再从D2启动D1或者D3,则又会再创建一个 task,因此,若操作步骤为 other->D2->D1,这过程就涉及到了3个task了。






注:当应用中有三个 Activity 为 A、B、C,B启动模式为 singleInstance ,若此时启动顺序为


 A > B > C ,那么此时按返回键 将回到 A,再按返回键 A 结束后 才会回到 B。即:只有当当前任务的回退栈中的所有 Activity 都结束 ,才会回到上一个任务...





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值