Activity任务栈的使用(启动模式介绍)

Android 任务栈简介

android应用程序通常会被拆分为多个activity,各个activity之间通过Intent进行连接,而android系统通过栈结构保存整个app的activity。合理的任务栈可以提高程序的性能。当一个app启动时,如果环境中不存在改app的任务栈,那么系统就会创建一个任务栈,此后,这个app所启动的activity都将在这个任务栈中被管理,这个栈也被称为一个Task,需要注意的是,一个任务栈(Task)中的Activity可以来自不同的App,同一个App的Activity也可能不在一个任务栈(Tadk)中。 


关于栈结构是一个先进后出 线性表。正常情况下,当一个Activity启动时,新启动的Activity就会置于任务栈的顶端,并处于活动状态,启动他的Activity依然保留在任务栈中,处于停止状态,当用户按下返回键或调用finish()方法时,系统会移除任务栈顶端的Activity,让后面的Activity恢复活动状态。当然也有一些特殊的启动模式会打破这样的一个启动规律,就是我们接下来要介绍的AndroidMainifest启动模式:

AndroidMainifest启动模式
    Android开发者在AndroidMainifest文件中一共设计了四种启动模式。如下:
- standard           
- singleTop              
- singleTask
- singleInstance


 

standard

默认的启动模式,如果不指定Activity的启动模式,系统默认使用standard启动模式,这种模式每次启动Activity都会创建新的实例,新创建的Activity会覆盖在原来的Activity上。 


singleTop

如果启动模式是singleTop模式,系统在启动Activity时就会判断当前栈顶的Activity是不是要启动的Activity,如果是,则不创建新的Activity而直接引用这个Activity,如果不是则创建新的Activity。这种启动模式在判断栈顶是当前的Activity时,虽然不会创建新的实例,但是系统仍然会在Activity启动时调用onNewIntent()方法, 


singleTask

singleTask启动模式与singleTop模式类似,他们之间的区别是singleTop判断的是当前栈顶元素是否是需要启动的Activity,而singleTask是检测整个Activity栈中是否存在当前需要启动的Activity,如果存在,则将该Activity置于栈顶,并将该Activity以上的Activity全部销毁,这里是指同一个App中启动这个singleTask的Activity,如果是其他程序以singleTask模式来启动这个Activity,那么他将创建一个新的任务栈。 
 


 
需要注意的是,如果启动模式为singleTask的Activity已经在后台的一个任务栈中了,那么启动后,后台的这个任务栈将一起被切换到前台。如图: 

 
singTask启动模式特例
singleInstance

声明singleInstance这种启动模式的Activity在启动时会出现在新的任务栈中,而且该任务栈中只存在这一个Activity,比如应用A的任务栈中创建了MainActivity实例,且启动模式为singleInstance,如果应用B也要激活MainActivity,则不需要创建MainActivity的实例,两个应用共享该Activity实例,这种启动模式通常应用于需要与程序分离的界面。

 

singleInstance

说明:如果在一个singTop 或者singleInstance的ActivityA中通过startActivityForResult()方法来启动另一个ActivityB,那么系统将会直接返回 Activity.RESULT_CANCELED 而不会再去等待返回。这是由于系统在Framework层做了对这两种启动模式的限制,Android开发者认为,不同的Task之间,默认是不能传递数据的。如果一定要传递数据,只能通过Intent来绑定数据。
 

详细内容请看:Activity任务栈的使用(启动模式介绍)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值