一. 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