您的位置:首页 > 移动开发 > Android开发

Intent flag参数和Android的四种lauchMode

2015-09-10 09:57 411 查看
一. Intent flag 常用的参数

FLAG_ACTIVITY_CLEAR_TOP

假设当前栈中有A,B,C,D四个Activity。D此时通过intent跳转到B,如果添加这个flag,那么栈变为A,B。

FLAG_ACTIVITY_NEW_TASK

假设当前栈中有A,B,C三个Activity。C通过Intent跳转到D,如果添加这个flag,并且如果D Activity在manifest.xml 中的申明添加了Task Affinity,系统会先查找有没有和D的Task Affinity相同的栈存在。如果存在,将D压入那个栈中,如果不存在,将会新建一个D的Affinity的栈将其压入;如果D的Task Affinity默认没有设置,则将D直接压入A,B,C所在的栈中,原来的栈变成A,B,C,D4个activity。

FLAG_ACTIVITY_NO_HISTORY

假设当前栈中有A,B,C四个Activity。如果C想要通过Intent跳转到D,这个Intent添加此标记后,手机屏幕上会显示D的内容,但是当前栈中仍然是A,B,C三个Activity。

FLAG_ACTIVITY_SINGLE_TOP

如果Intent的目标Activity就是栈顶Activity,那么将不会新建一个实例压入栈中。

二.Android的四种lauchMode

<activity android:name="FirstActivity"
android:launchMode="standard|singleTop|singleTask|singleInstance"></activity>


standard

Activity每次start的时候都会,都会有初始化一个新的实例加入到栈中。

singleTop

可以多次实例,但是如果处于当前栈顶并且接受一个与当前Activity一样类型的Intent,那么不会创建新的实例,而是触发onNewIntent()事件。

singleTask

系统会创建一个新的Task(如果没有启动应用)和一个Activity实例在Task根部;如果Activity实例已存在单独的Task中,系统会调用已存在Activity的onNewIntent()方法。这种情况下,系统不会让其他的Activity运行在所有持有的Task实例中。

singleInstance

和singleTask类似,除了系统不会让其他的Activity运行在所持有的task实例中,这个Activity是独立的,并且task的成员只有它,任何其他Activity运行这个Activity都将打开一个独立的task。

Activity的Task Affinity属性指出了它希望进入的Task。如果一个Activity没有显式的指明该Activity的task Affinity属性,那么它的这个属性就等于Application指明的taskAffinity,如果 Application也没有指明,那么该taskAffinity的值就等于包名。而Task也有自己的affinity属性,它的值等于它的根 Activity的taskAffinity的值

本博客参考http://www.open-open.com/lib/view/open1345173373350.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: