intent.setFlags方法中参数值的含义
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方法中参数值的含义的更多相关文章
- intent.setFlags方法中的参数值含义
一. intent.setFlags()方法中的参数值含义: 1.FLAG_ACTIVITY_CLEAR_TOP:例如现在的栈情况为:A B C D .D此时通过intent跳转到B,如果这个int ...
- Activity中setResult(int resultCode, Intent data)与onActivityResult(int requestCode, int resultCode, Intent data)方法的调用
关于Activity的生命周期 onCreate(Bundle savedInstanceState):可以进行一些初始化的工作在activity第一次被创建的时候调用.这里是你做所有初始化设置的地方 ...
- ajax 方法的使用以及方法中各参数的含义
由于近来经常在项目中使用 ajax 这个函数,在工作之余自己查找了相关的资料,并总结了 ajax 方法的使用,以及方法中各个参数的含义,供大家学习参考使用 type: 要求为String类型的参数,请 ...
- 我的Android进阶之旅------>android中service的onStartCommand()方法中intent为null的问题
今天在维护公司的一个APP的时候,突然爆了空指针异常, Caused by: java.lang.NullPointerException: Attempt to invoke virtual met ...
- 在MessageBox的Show方法中如何无限使用参数值?
今天发现在show方法中不能使用花括号的方式使用多个可变参数,经过查询得出结果.在show方法中是不存在花括号的方式使用参数的.在Console.WriteLine中是存在的,如下: 那么在show方 ...
- ViewGroup dispatchTouchEvent方法中 mFirstTouchTarget标志是否为空的含义
在ViewGroup dispatchTouchEvent方法中首次出现mFirstTouchTarget的语句为: if (actionMasked == MotionEvent.ACTION_DO ...
- Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();singleTask的两种启动方式。
原文:Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();singleTask的两种启动方式. Android Activity 的四种启动模 ...
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法
如果已经启动了四个Activity:A,B,C和D.在D Activity里,我们要跳到B Activity,同时希望C finish掉,可以在startActivity(intent)里的inten ...
- TortoiseSVN中图标的含义
今天在使用svn时发现有好多不认识了,所以查了下svn帮助手册.借此总结了下 svn 中图标的含义 一个新检出的工作复本使用绿色的勾做重载.表示Subversion状态 正常. 在开始编辑一个文件后, ...
随机推荐
- 转:eclipse载入extjs4出现内存溢出错误的解决方法
去掉.project文件中的以下部分:第一部分:<buildCommand> <name>org.eclipse.wst.jsdt.core.javascriptVali ...
- 关于索引degree设置的问题
--并行查询 可以使用并行查询的情况 1. Full table scans, full partition scans, and fast full index scans 2. Index ful ...
- intel集成显卡linux驱动安装
https://01.org/linuxgraphics/documentation/build-guide-0 https://01.org/linuxgraphics/community/mesa ...
- 转自http://blog.sina.com.cn/daylive——C++ STL map
Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作! 1.map最基本的构造函数: map<string ...
- 《Linear Algebra and Its Applications》-chaper1-线性方程组-线性相关性
这篇文章主要简单的记录所谓的“线性相关性”. 线性相关性的对象是向量R^n,对于向量方程,如果说x1v1 + x2v2 + …+xmvm = 0(其中xi是常数,vi是向量)有且仅有一个平凡解,那么我 ...
- 链接器(linker)的作用——CSAPP第7章读书笔记
首先说说我为什么要去读这一章.这个学期开OS的课,在Morden Operating System上读到和Process有关的内容时看到这样一句话:“Process is fundamentally ...
- 哈希表的C语言实现
首先介绍一下什么是哈希表.同线性表.树一样,哈希表也是一种数据结构,理想情况下可以不需要任何比较,一次存取便能得到所查记录.所以它的优点就是查找特定记录的速度快.因为哈希表是基于数组的,所以创建后就难 ...
- Posix-linux_route
route命令显示或者修改本地IP路由表. 语法: [plain] route [-CFvnee] route [-v] [-A family] add [-net|-host] ...
- Python自动化之Django的CSRF
什么CSRF? CSRF, Cross Site Request Forgery, 跨站点伪造请求.举例来讲,某个恶意的网站上有一个指向你的网站的链接,如果 某个用户已经登录到你的网站上了,那么当这个 ...
- ssh远程连接不上ubuntu
问题描述: 1.ubuntu安装了openssh-server,启动了ssh 守护进程,使用端口22 2.在本机可以 ssh 127.0.0.1 连接 3.通过ssh远程(比如用putty 或crt) ...