Activity4种启动模式以及Flags

android艺术探索学习1---Activity生命周期

android艺术探索学习2---Activity4种启动模式以及Flags


一、activity的4中启动模式,包括standard,singleTop,singleTask,singleInstance。

    我们启动一个activity,系统会创建一个activity的实例并把实例放到一个任务栈中;启动多个activity,系统就会创建多个activity实例并把他们一一放入到任务栈中,这时,如果我们按返回键,系统就会把任务栈中最上面的一个activity取出,没按一次会取出一个(取出的顺序和放入的顺序刚好是相反的,比如放入的顺序是ABCD,则取出的顺序就是DCBA,这个就是栈结构“先进后出”的栈特性),当任务栈中所有activity都被取出,系统就会回收这个任务栈。

    如果我们使用系统默认的启动方式,一直让一个activity不停的多次启动自己。然后我们按返回键,就会出现每次按返回键,出现的都是同一个activity,知道任务栈中的所有activity被释放完。这种对一般的应用来说算是一个bug,会造成不怎么好的客户体验,所有Android提供了其他的几种启动模式,可以通过设置启动模式来修改这个默认行为。

    1. 设置activity启动模式的方法:

       在Manifest.xml中的对应的activity中增加android:lauchMode=“standard”,修改“standard”的值就可以修改activity的启动模式。

    2. 四种启动模式的特点:

lauchMode值启动模式特点
standard标准模式 启动一个activity,不管任务中有没有实例,都会创建一个activity实例,并将这个实例放到任务栈中。
singleTop栈顶复用模式启动一个activity时,如果这个activity的实例已经在任务栈的顶部,则不会创建一个新的实例,比如,A启动A,这个时候任务栈中只会有A的实例;如果栈内没有这个实例,则会创建一个新的实例,并将这个实例放到栈顶。
singleTask栈内复用模式启动一个应用会创建一个对应的任务栈来防止activity,activity也可以自己指定一个存放自己的任务栈,通过在manifest中设置

taskAffinity的值即可。这种启动模式有几种情况:

  1. 如果启动的activity所指定的栈已经存在,但是任务栈中不存在此实例,则创建一个新的实例放入到任务栈中;
  2. 如果启动的activity所指定的栈已经存在,并且栈中已经存在实例,则将此栈至栈顶的所有栈都推出任务栈,把此栈置于任务栈的栈顶,比如任务栈中已经存在ADBC四个实例,现在启动D,则会把bc推出任务栈,D置于栈顶,任务栈中就只有AD两个实例;
  3. 启动的activity所指定的栈不存在,则会新创建一个任务栈,并创建一个实例放入到任务栈中。
singleInstance单实例模式此模式是一个增强的singleTask模式,设置了此模式的activity,会自动创建一个新的的任务栈来存放实例。其它特性和singleTask一致。

    3.taskAffinity的使用:应用启动时会默认创建一个名称是包名的任务栈,管理存放所以未指定任务栈的activity。从启动模式中可以看出,activity可以自己指定自己存放的任务栈,就是通过taskAffinity来设置任务栈的名称。taskAffinity主要是和singleTask以及allowTaskReparenting两个属性配合使用,其它的属性无意义。taskAffinity的名称也必须是包名的形式,要不然也会报错;设置了taskAffinity,必须设置singleTask或者allowTaskReparenting两个属性的值,要不然,启动activity会报错。

二、activity的Flags

    activity的flag是有很多种,这里只介绍几个常用的。

  1. FLAG_ACTIVITY_NEW_TASK:这个标记位的作用是为activity指定“singleTask”启动模式;
  2. FLAG_ACTIVITY_SINGLE_TOP:这个标记位的作用是为activity指定“singleTop”启动模式;
  3. FLAG_ACTIVITY_CLEAR_TOP:这个标记位的作用是启动带有此标记位的activity时,会把装有此activity任务栈中activity实例以上的activity都出栈;
在《android艺术探索》这本书里对Activity4种启动模式以及Flags有更详细的介绍,我这里只是挑选了大概的一些实际情况中使用的情况来简略描述了下,如果需要更深入,请看《android艺术探索》。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值