Android任务栈简介

1 各个Activity之间是通过Intent连接的,而Android系统,通过栈结构来保存整个App的Activity,栈低的元素是整个任务栈的发起者.
2 当一个App启动的时候,当前环境中没有该App的任务栈,则会创建一个新的任务栈,之后,这个App所启动的所有Activity都将在这个任务栈中被管理,该栈叫Task.即表示若干个Activity的集合,他们的组合形成一个Task,它是一个先进后出的线性表.
注意:一个Task中的Activity可以来自不同的App,同一个App的Activity可能在不同的Task中.
3 Activity在一个Task中的启动模式有两种方法:
3.1 通过在AndroidManifest文件中的属性launchMode来设置.
AndroidManifest的启动模式

  • standard
    该模式下,每次点击都会创建一个新的Activity覆盖在原来的Activity上.
  • singleTop
    该模式下启动一个Activity时,系统会判断当前栈顶是否是需要启动的这个Activity,若是,则直接复用,不需新建,若不是则会新建,比如qq消息界面,当直接复用这个Activity,系统会调用该Activity的onNewIntent()方法.
  • singleTask
    该模式下启动一个Activity时,系统会判断整个Activity栈中是否有需要启动的Activity,若有,则销毁该Activity以上所有的Activity,将自己置于栈顶.若没有,将会新建一个这样的Activity.
    注意:这是指在同一个App中启动这个模式的Activity,其他的程序启动这个模式的Activity的时候,会新建一个任务栈,但是如果这个模式的Activity已经在后台的一个任务栈中了,在启动这个Activity后,后台的任务栈将会一起被切换到前台.
  • singleInstance
    该模式下启动一个Activity时,会新建一个任务栈,而且只保存这一个Activity.
    关于sinleTop,sinlegInstance模式的Activity使用startActivityForResult()时,系统直接返回Activity.RESULT_CANCELED,不会再去等待返回.
    3.2 通过Intent的Flag来设置
  • Intent.FLAG_ACTIVITY_NEW_TASK
    使用一个新的Task来启动一个Activity,而且启动的每个Activity都将在一个新的Task.适用于Service中启动一个Activity,因为Service中不存在Activity栈.
  • FLAG_ACTIVITY_SINGLE_TOP 类似于singletop模式
  • FLAG_ACTIVITY_CLEAR_TOP 类似于singleTask模式
  • FLAG_ACTIVITY_NO_HISTORY
    该模式下启动的Activity再启动其他Activity后,该Activity就消失了,不会在栈中保留.

4 清空任务栈
系统提供了清空任务栈的方法,让我们将一个Task全部清楚,通常是通过AndroidManifeast文件中< activity>标签中的以下属性来设置清楚任务栈.
- clearTaskOnLaunch
在返回该模式下的Activity时,将该Activity之上的所有Activity全部清楚,这个属性,可以让这个Task每次在初始化的时候,都只有这一个Activity.
- finishOnTaskLaunch
通过这个属性,在离开该模式下的Activity所处的Task,那么用户再返回时,该Acitivity就会被finish掉.与clearTaskOnLaunch类似,只是clearTaskOnLaunch是作用与别人身上,而finishOnTaskLaunch是作用于自己.
- alwaysRetainTaskState
该模式下的Activity所在的Task将不接受任何清楚命令,一直保持当前Task状态.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值