intent.setFlags()方法中参数的含义

  1.FLAG_ACTIVITY_NEW_TASK:

  例如现在栈一的情况是:A    B   C(C位于栈顶),C通过intent跳转到D,并且这个Intent添加了FLAG_ACTIVITY_NEW_TASK标记,如果D这个Activity在Manifest.xml中声明了添加Task affinity,系统首先会查找有没有和D的Task affinity相同的task栈存在,如果存在,就将D压入那个栈,如果不存在则会新建一个D的affinity的栈将其压入。如果D的Task affinity默认没有设置,则会将其压入栈1,变成A B C D,这样就和不加FLAG_ACTIVITY_NEW_TASK标记效果是一样的了。但如果试图从非Activity的非正常途径启动一个activity,比如从一个service、BroadcastReceiver等中启动一个Activity,则intent要设置Intent.FLAG_ACTIVITY_NEW_TASK标记。Activity要存在于Activity栈中,而非Activity的途径启动Activity时必然不存在一个Activity的栈,所以要新建一个Activity栈来存放要启动的Activity。

  2.FLAG_ACTIVITY_CLEAR_TOP:

   例如现在的栈情况为A B C D, D此时通过intent跳转到B,如果这个intent设置FLAG_ACTIVITY_CLEAR_TOP标记,则栈情况变为:A B。如果没有添加这个标记,则栈的情况将会变为:A B C D B 。也就是说,如果设置了FLAG_ACTIVITY_CLEAR_TOP标记,并且目标Activity在栈中已存在,则会把位于该目标Activity之上的Activity从栈中弹出销毁。

    3.FLAG_ACTIVITY_NO_HISTORY:

   例如现在栈的情况为:A B C 。C通过intent跳转到D,这个intent添加FLAG_ACTIVITY_NO_HISTORY标志,此时界面显示D的内容,但是它并不会压入栈中。如果按返回键,返回到C,栈的情况是:A  B  C。如果D中又跳转到E,栈的情况为:A B C E,此时按返回键会回到C,因为D根本就没有被压入栈中。

  4.FLAG_ACTIVITY_SINGLE_TOP:

   和Activity的Launch mode的singleTop类似。如果某个intent设置了这个标志,并且这个intent的目标Activity就是栈顶的Activity,那么将不会新建一个实例压入栈中。简言之,目标Activity已在栈顶则跳转过去,不在栈顶则在栈顶新建Activity。

因此,使用startActivity的时候,会遇到如下异常:

  Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

  Context中有一个startActivity方法,Activity继承自Context,覆写了startActivity方法。如果使用Activity的startActivity方法,不会有任何问题,而如果使用Context的startActivity方法,就必须新建一个Activity栈,遇到上面的异常,是因为使用了Context的startActivity方法。解决的办法是:为intent设置一个flag,即intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);这样就可以在新的Activity栈里启动这个Activity了。

  以上内容转自:http://blog.csdn.net/berber78/article/details/7278408

intent.setFlags方法中参数值的含义的更多相关文章

  1. intent.setFlags方法中的参数值含义

     一. intent.setFlags()方法中的参数值含义: 1.FLAG_ACTIVITY_CLEAR_TOP:例如现在的栈情况为:A B C D .D此时通过intent跳转到B,如果这个int ...

  2. Activity中setResult(int resultCode, Intent data)与onActivityResult(int requestCode, int resultCode, Intent data)方法的调用

    关于Activity的生命周期 onCreate(Bundle savedInstanceState):可以进行一些初始化的工作在activity第一次被创建的时候调用.这里是你做所有初始化设置的地方 ...

  3. ajax 方法的使用以及方法中各参数的含义

    由于近来经常在项目中使用 ajax 这个函数,在工作之余自己查找了相关的资料,并总结了 ajax 方法的使用,以及方法中各个参数的含义,供大家学习参考使用 type: 要求为String类型的参数,请 ...

  4. 我的Android进阶之旅------>android中service的onStartCommand()方法中intent为null的问题

    今天在维护公司的一个APP的时候,突然爆了空指针异常, Caused by: java.lang.NullPointerException: Attempt to invoke virtual met ...

  5. 在MessageBox的Show方法中如何无限使用参数值?

    今天发现在show方法中不能使用花括号的方式使用多个可变参数,经过查询得出结果.在show方法中是不存在花括号的方式使用参数的.在Console.WriteLine中是存在的,如下: 那么在show方 ...

  6. ViewGroup dispatchTouchEvent方法中 mFirstTouchTarget标志是否为空的含义

    在ViewGroup dispatchTouchEvent方法中首次出现mFirstTouchTarget的语句为: if (actionMasked == MotionEvent.ACTION_DO ...

  7. Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();singleTask的两种启动方式。

    原文:Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();singleTask的两种启动方式. Android Activity 的四种启动模 ...

  8. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法

    如果已经启动了四个Activity:A,B,C和D.在D Activity里,我们要跳到B Activity,同时希望C finish掉,可以在startActivity(intent)里的inten ...

  9. TortoiseSVN中图标的含义

    今天在使用svn时发现有好多不认识了,所以查了下svn帮助手册.借此总结了下 svn 中图标的含义 一个新检出的工作复本使用绿色的勾做重载.表示Subversion状态 正常. 在开始编辑一个文件后, ...

随机推荐

  1. android.support.design.widget.AppBarLayout 在android5.0+底部显示空白条问题

    在最外层使用 RelativeLayout作为根节点,同时设置 android:fitsSystemWindows="true"问题解决. <?xml version=&qu ...

  2. 分析智能卡的ATR格式

    一些例子 NXP 080=========3b f8 T0   Y1 = 0xF(TA1, TB1, TC1, TD1), K = 813 TA1 F = 0x1(Fi = 372, Fmax = 5 ...

  3. Wi-Fi定位,AP定位

    Wi-Fi实时定位系统 基于Wi-Fi的无线局域网实时定位系统(Wi-Fi RTLS)结合无线局域网络(WLAN).射频识别(RFID)和实时定位等多种技术,广泛地应用在有无线局域网覆盖的区域,实现复 ...

  4. Hbase 计数器

    Hbase计数器可以用于统计用户数,点击量等信息 基本操作 可以使用incr操作计数器,incr语法格式如下: incr '<table>', '<row>', '<co ...

  5. URL图片预览(createObjectURL)

    1.说明 1)createObjectURL 作用:创建url(creates  a URL for the specified object); 语法:var url = URL.createObj ...

  6. 获取git的当前分支名称

    git branch | grep \"*\" | awk -F \"_\" '{print $2}'

  7. linux有用网址

    正则表达式在线测试 http://tool.oschina.net/regex

  8. jQuery.isEmptyObject()函数用于判断指定参数是否是一个空对象。

    jquery中有一个函数isEmptyObject()用来判断制定参数是否是一个空对象. 示例如下: function isEmptyObject(e) { var t; for (t in e) r ...

  9. View inflate方法和LayoutInflater inflate方法的区别详解

    原创文章,转载请注明出处:http://www.cnblogs.com/baipengzhan/p/6257510.html 我们在Android开发中,对于将布局填充成View对象,最常用的两种办法 ...

  10. 【mac开发.NET】No installed provisioning profiles match the installed iOS signing identities

    编译错误提示 /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets: Er ...