android Activity启动模式与intent Flags

来源:互联网 发布:软件界面设计下载软件 编辑:程序博客网 时间:2024/06/07 08:35

android 启动一个activity模式由两部分控制,一部分是大家都知道的activity的四种启动模式,还有一部分是intent.setFlags()来设置启动方式。下面我们来一一看看这两种方式怎么协同工作控制activity的启动的。

一,activity四种启动模式


老生常谈的东西了,这儿简单在回顾一下:

1.standard:最简单的,每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈,android默认activity都是这种模式;

2.singleTop:如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例;

3.singleTask:如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop,这种模式下一个栈中这个activity永远只有一个;

4.singleInstance:这是两个应用间互相跳转时设置的,如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例;

二,intentFlags

这个可能没有上边的四种模式熟悉,但是它的作用是不可忽视的,在用intent进行activity之间的跳转时,可以调用intent.setFlags(int 不同的方式)设置启动的方式,其中参数有许多,各有不同的含义,并且可以同时设置多个,比如:intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);下面我们来看看不同参数的含义:

1.FLAG_ACTIVITY_NEW_TASK

当Intent对象包含这个标记时,系统会寻找或创建一个新的task来放置目标Activity,寻找时依据目标Activity的taskAffinity属性进行匹配,如果找到一个task的taskAffinity与之相同,就将目标Activity压入此task中,如果查找无果,则创建一个新的task,并将该task的taskAffinity设置为目标Activity的taskActivity,将目标Activity放置于此task。注意,如果同一个应用中Activity的taskAffinity都使用默认值或都设置相同值时,应用内的Activity之间的跳转使用这个标记是没有意义的,因为当前应用task就是目标Activity最好的宿主。

**注:activitytaskAffinity属性:官方文档中提到,可以把不同的 应用中的activity的taskAffinity设置成相同的值,这样的话这两个activity虽然不在同一应用中,却会在运行时分配到同一任务中。**

2.FLAG_ACTIVITY_CLEAR_TOP

FLAG_ACTIVITY_CLEAR_TOP表示启动的Activity会将Task中位于其上的Activity都强制出栈,使其自身位于栈顶。在Standard模式下,如果原来的Activity栈顺序为 A -> B1 -> D, 此时D通过FLAG_ACTIVITY_CLEAR_TOP启动B,则栈顺序为A -> B2,这种模式下会重新创建目标activity。对于同时设置了FLAG_ACTIVITY_SINGLE_TOP,则栈顺序为 A-> B1(此时回调onNewIntent()..)此时只是把原先栈中的目标activity移到栈顶,此时效果与Activity启动模式中的singleTask相同。

3.FLAG_ACTIVITY_SINGLE_TOP

与Activity启动模式中的singleTop效果相同,一般配合和FLAG_ACTIVITY_CLEAR_TOP一起使用,如:intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);此时是讲站内目标activity(不新建,只调用onNewIntent())移到栈顶,pop其上所有activity。

4.FLAG_ACTIVITY_NO_HISTORY

intent启动的Activity,一旦退出,它立马从栈中删掉,task为A,B,C,这个时候再C中以这个FLAG启动D的,D再启动E,这个时候栈中情况为A,B,C,E,D直接从栈中删除。

0 0
原创粉丝点击