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
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
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
相关文章推荐
- 对Android的理解
- Android控件之ListView用法实例详解
- 兔子--在Android系统中,启动Service的2种方式以及区别
- android 学习路线
- Android开发文档之四种点击事件
- Android上的内部存储(文件)实现
- android 设置头像以及裁剪功能
- 下载编译和测试Android 源代码
- Android换肤Demo
- 【Android】Messenger 跨进程通信
- [置顶]android创建sqlite数据库
- [置顶]android下测试方法及junit单元测试框架配置方法
- Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager
- Android5.0 GMS包
- Android ProGuard: Please correct the above warnings first的警
- 解决Win10下Android Studio terminal无法输入的问题
- Android studio 替换同名图片后后缀名不同 报错
- 0909Android基础多线程编程
- Android的服务——Service和IntentService
- ADT中的Android Virtual Device Manager中找不到我的android设备的手机