android中的四种INTENT_FLAG

先首先简单介绍下Task和Activity的关系

我们知道在android项目中有这样一个容器:Task()。而里面装的东西则是我写的Activity,第一个(A extends Activity)则会处于Task的最下面,而最后添加(Z extends Activity)在Task的最上面。从Task中取出的时候则是从最顶端开始取出,最先取出的是最后添加的Z,最后取出的是最先加入的A,不过Task中的顺序可以控制,在Activity跳转时用到的Intent Flag中可以设置新建Activity的创建方式。
设置Intent的Flag主要有下面四种方式:

1,standard:Activity默认加载方法,即使某个Activity在 Task中已存在,另一个activity通过Intent跳转到该activity,同样会新创建一个实例压入Task中。如:现在Task的情况为:A B C D,在D这个Activity中通过Intent跳转到D,那么现在的Task中情况为: A B C D D 。如果栈顶的D通过Intent跳转到B,则栈情况为:A B C D D B。这时候依次按返回键,D  D C B A会依次弹出Task显示在界面上。

2,singleTop:某个Activity设置成singleTop,当该Activity位于Task顶的时候,通过Intent跳转到本身这个Activity,则将不会创建一个新的实例。例如:现在Task的情况为:A B C D。D的加载模式Launch mode)设置成了singleTop,那么在D中启动Intent跳转到D,那么将不会新创建一个D的实例,此时Task的情况依然为:A B C D。但是如果此时B的模式也是singleTop,D跳转到B(B没有在Task的Top),则会新建一个B的实例压入栈中,因为此时B不是位于栈顶,此时Task就变成了:A B C D B。

3,singleTask:某个Activity是singleTask模式,那么Task栈中只有一个该Activity的实例。例如:现在栈的情况为:A B C D。B的加载模式(Launch mode)为singleTask,D通过Intent跳转到B,则栈的情况变成了:A B。而C和D被弹出销毁了,就是说位于B之上的实例都被销毁了。

4,singleInstance:将Activity压入一个新建的Task栈中。例如:Task栈1的情况为:A B C。C通过Intent跳转到D,而D的加载模式(Launch mode)为singleInstance,则将会新建一个Task栈2。此时Task栈1的情况还是为:A B C。Task栈2的情况为:D。此时屏幕界面显示D的内容,如果这时D又通过Intent跳转到D,则Task栈2中也不会新建一个D的实例,所以两个栈的情况也不会变化。而如果D跳转到C,则栈1的情况变成了:A B C C,因为C的加载模式(Launch mode)为standard,此时如果再按返回键,则栈1变成:A B C。也就是说现在界面还显示C的内容,不是D。 现在有一个问题就是这时这种情况下如果用户点击了Home键,则再也回不到D的即时界面了。如果想解决这个问题,可以为D在Manifest.xml文件中的声明加上<intent-filter> 
                                                  <action android:name="android.intent.action.MAIN" /> 
                                                 <category android:name="android.intent.category.LAUNCHER" /> 
                                               </intent-filter>

加上这段之后,也就是说该程序中会有两个这种声明,另一个就是那个正常的根主activity,在打成apk包安装之后,在程序列表中能看到两个图标,但是如果都运行的话,在任务管理器中其实也只有一个。上面的情况点击D的那个图标就能回到它的即时界面(比如一个EditText,以前输入的内容,现在回到之后依然存在)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值