android之intent的Flag详解

 

1.Task是包含一系列Activity的堆栈,遵循先进后出原则.

2.Task默认行为:

(1)前提:ActivityA和ActivityB在同一个应用中.

操作:ActivityA启动开僻Task堆栈(堆栈状态:A),在ActivityA中启动ActivityB(堆栈状态:AB),按下BACK返回键(堆栈状态:A).

(2)前提:ActivityA和ActivityB在同一个应用中,应用名称为"TaskOne应用".

操作:在Launcher中单击"TaskOne应用"图标,ActivityA启动开僻Task堆栈,命名为TaskA(TaskA堆栈状态:A),

在ActivityA中启动ActivityB(TaskA堆栈状态:AB),长按Home键,返回Launcher,启动其它应用(如:电子书),

开僻一个新Task堆栈,命名:TaskB,长按Home健,返回Launcher,单击"TaskOne应用"图标,此时TaskA堆栈返回前台,

ActivityB为栈顶应用,供用户使用.

(3)前提:ActivityA在名称为"TaskOne应用"的应用中,ActivityC在名称为"TaskTwo应用"的应用中.

操作:在Launcher中单击"TaskOne应用"图标,ActivityA启动开僻Task堆栈,命名为TaskA(TaskA堆栈状态:A),

在ActivityA中启动ActivityC(TaskA堆栈状态:AC),长按Home键,返回Launcher,启动"TaskTwo应用"即ActivityC,

开僻新的Task堆栈,命名为TaskB,按BACK键返回Launcher,单击"TaskOne应用"图标,此时TaskA堆栈返回前台,

ActivityB为栈顶应用,供用户使用.

3.IntentFLAG介绍:

(1)FLAG_ACTIVITY_NEW_TASK:设置此状态,记住以下原则,首先会查找是否存在和被启动的Activity具有相同的亲和性的任务栈(即taskAffinity,注意同一个应用程序中的activity的亲和性一样,所以下面的a情况会在同一个栈中,前面这句话有点拗口,请多读几遍),如果有,刚直接把这个栈整体移动到前台,并保持栈中的状态不变,即栈中的activity顺序不变,如果没有,则新建一个栈来存放被启动的activity

a.前提:ActivityA和ActivityB在同一个应用中.

操作:ActivityA启动开僻Task堆栈(堆栈状态:A),在ActivityA中启动ActivityB,启动ActivityB的Intent的Flag设为

FLAG_ACTIVITY_NEW_TASK,ActivityB被压入ActivityA所在堆栈(堆栈状态:AB).

原因:默认情况下同一个应用中的所有Activity拥有相同的关系(taskAffinity).

b.前提:ActivityA在名称为"TaskOne应用"的应用中,ActivityC和ActivityD在名称为"TaskTwo应用"的应用中.

操作1:在Launcher中单击"TaskOne应用"图标,ActivityA启动开僻Task堆栈,命名为TaskA(TaskA堆栈状态:A),

在ActivityA中启动ActivityC,启动ActivityC的Intent的Flag设为FLAG_ACTIVITY_NEW_TASK,

Android系统会为ActivityC开僻一个新的Task,命名为TaskB(TaskB堆栈状态:C),长按Home键,选择TaskA,

ActivityA回到前台,再次启动ActivityC(两种情况1.从桌面启动;2.从ActivityA启动,两种情况一样),这时TaskB回到前台,ActivityC显示,供用户使用,即:

包含FLAG_ACTIVITY_NEW_TASK的Intent启动Activity的Task正在运行,则不会为该Activity创建新的Task,

而是将原有的Task返回到前台显示.

操作2:在Launcher中单击"TaskOne应用"图标,ActivityA启动开僻Task堆栈,命名为TaskA(TaskA堆栈状态:A),

在ActivityA中启动ActivityC,启动ActivityC的Intent的Flag设为FLAG_ACTIVITY_NEW_TASK,

Android系统会为ActivityC开僻一个新的Task,命名为TaskB(TaskB堆栈状态:C),在ActivityC中启动

ActivityD(TaskB的状态:CD)长按Home键,选择TaskA,ActivityA回到前台,再次启动ActivityC(从桌面或者ActivityA启动,也是一样的),

这时TaskB回到前台,ActivityD显示,供用户使用.说明了在此种情况下设置FLAG_ACTIVITY_NEW_TASK后,会先查找是不是有ActivityC存在的栈,根据亲和             性(taskAffinity),如果有,刚直接把这个栈整体移动到前台,并保持栈中的状态不变,即栈中的顺序不变

(2)FLAG_ACTIVITY_CLEAR_TOP:

前提:ActivityA,ActivityB,ActivityC和ActivityD在同一个应用中.

操作:ActivityA启动开僻Task堆栈(堆栈状态:A),在ActivityA中启动ActivityB(堆栈状态:AB),在ActivityB中启动

ActivityC(堆栈状态:ABC),在ActivityC中启动ActivityD(堆栈状态:ABCD),在ActivityD中启动ActivityB,

启动ActivityB的Intent的Flag设置为FLAG_ACTIVITY_CLEAR_TOP,(堆栈状态:AB).

(3)FLAG_ACTIVITY_BROUGHT_TO_FRONT:

前提:ActivityA在名称为"TaskOne应用"的应用中,ActivityC和ActivityD在名称为"TaskTwo应用"的应用中.

操作:在Launcher中单击"TaskOne应用"图标,ActivityA启动开僻Task堆栈,命名为TaskA(TaskA堆栈状态:A),

在ActivityA中启动ActivityC,启动ActivityC的Intent的Flag设为FLAG_ACTIVITY_NEW_TASK,

Android系统会为ActivityC开僻一个新的Task,命名为TaskB(TaskB堆栈状态:C),在ActivityC中启动

ActivityD(TaskB的堆栈状态:CD),长按Home键,选择TaskA,ActivityA回到前台,在ActivityA中再次启动ActivityC,

在启动ActivityC的Intent中设置Flag为FLAG_ACTIVITY_BROUGHT_TO_FRONT,TaskB回到前台,

ActivityC显示,(TaskB的堆栈状态:C).

(4)FLAG_ACTIVITY_MULTIPLE_TASK:

与FLAG_ACTIVITY_NEW_TASK结合使用,首先在Intent中设置FLAG_ACTIVITY_NEW_TASK,打开Activity,

则启动一个新Task,接着在Intent中设置FLAG_ACTIVITY_MULTIPLE_TASK,再次打开同一个Activity,则还会新启动一个Task.

(5)FLAG_ACTIVITY_SINGLE_TOP:

当前Task堆栈中存在ABCD四个Activity,A是栈顶Activity,D为栈底Activity,存在打开A的Intent中设置了

FLAG_ACTIVITY_SINGLE_TOP标志,则会使用栈顶A,而不会从新NewA.

(6)FLAG_ACTIVITY_RESET_TASK_IF_NEEDED:

例:存在ActivityA,ActivityB,ActivityC,ActivityA启动开僻Task堆栈,命名为TaskA(TaskA堆栈状态:A),

在ActivityA中启动ActivityB(TaskA堆栈状态:AB),接着ActivityB启动ActivityC(TaskA堆栈状态:ABC),

启动ActivityC的Intent中设置FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET标题,这样TaskA中有一个还原点,

当有包含FLAG_ACTIVITY_RESET_TASK_IF_NEEDED的Intent请求TaskA堆栈时(比如请求ActivityA)

系统就会将还原点以上的Activity清除,TaskA堆栈中只剩下了AB.

4.launchMode介绍:

(1)standard:

如果启动此Activity的Intent中没有设置FLAG_ACTIVITY_NEW_TASK标志,则这个Activity与启动他的Activity在同一个Task中,

如果设置了Activity请参考上面FLAG_ACTIVITY_NEW_TASK的詳細说明,"launchMode"设置为"standard"的

Activity可以被实例化多次,可以在Task中的任何位置,对于一个新的Intent请求就会实例化一次.

(2)singleTop:

如果启动此Activity的Intent中没有设置FLAG_ACTIVITY_NEW_TASK标志,则这个Activity与启动他的Activity在同一个Task中,

如果设置了Activity请参考上面FLAG_ACTIVITY_NEW_TASK的詳細说明,"launchMode"设置为"singleTop"的Activity可以被

实例化多次,可以在Task中的任何位置,对于一个新的Intent请求如果在Task栈顶,则会用栈顶的Activity响影Intent请求,

而不会重新实例化对象接收请求,如果没有在栈顶,则会实例化一个新的对象接收Intent请求.

(3)singleTask:

"launchMode"设置为"singleTask"的Activity总是在栈底,只能被实例化一次,它允许其它Activity压入"singleTask"的Activity

所在的Task栈,如果有新的Intent请求有此标志的Activity,则系统会清除有此标志的Task栈中的全部Activity,并把此Activity显示出来.

(4)singleInstance:

launchMode"设置为"singleInstance"的Activity总是在栈底,只能被实例化一次,不允许其它的Activity压入"singleInstance"

的Activity所在Task栈,即整个Task栈中只能有这么一个Activity.

5.taskAffinity属性:

(1)taskAffinity属性应和FLAG_ACTIVITY_NEW_TASK标志及allowTaskReparenting属性结合使用,如果只使用taskAffinity属性,

请参考上面Task默认的行为.

(2)与FLAG_ACTIVITY_NEW_TASK标志结合:

a.前题:ActivityA和ActivityB在同一个应用中,ActivityA与ActivityB设置不同的taskAffinity属性.

操作:ActivityA启动开僻Task堆栈,命名为TaskA(TaskA堆栈状态:A),在ActivityA中启动ActivityB,启动ActivityB

的Intent中设置FLAG_ACTIVITY_NEW_TASK标志,这时系统会新开僻一个Task堆栈,TaskB(TaskB堆栈状态:B).

b.前题:ActivityA在"TaskOne应用"中,ActivityC在"TaskTwo应用"中,ActivityA和ActivityC设置了相同的taskAffinity属性.

操作:ActivityA启动开僻Task堆栈,命名为TaskA(TaskA堆栈状态:A),在ActivityA中启动ActivityC,启动ActivityC的

Intent中设置FLAG_ACTIVITY_NEW_TASK标志,这时ActivityC会压入与ActivityA堆栈相同的TaskA堆栈(TaskA堆栈状态:AC).

(3)与allowTaskReparenting属性:

例:在"TaskOne应用"中有一个天气预报ActivityA,ActivityA与"TaskOne应用"中的其它Activity有默认的关系

(taskAffinity属性都没有设置),并且allowTaskReparenting属性设置为true,现在存在一个"TaskTwo应用

"启动了"TaskOne应用"中的天气预报ActivityA,这时ActivityA与"TaskTwo应用"中的Activity在同一个Task,

命名这个Task堆栈为TaskA,这时"TaskOne应用"启动,并且又打开发天气预报ActivityA,这时ActivityA会从TaskA堆栈中转移到

"TaskOne应用"所在的堆栈,即ActivityA可以在多个堆栈中来回转移.
6.alwaysRetainTaskState属性:

如果Task堆栈中的RootActivity设置了此属性值为true,不管出现任何情况,一直会保留Task栈中Activity的状态.

7.clearTaskOnLaunch属性:

如果Task堆栈中的RootActivity设置了此属性值为true,只要你一离开这个Task栈,则系统会马上清理除了RootActivity的全部Activity.

8.finishOnTaskLaunch属性:

如果某Activity设置了finishOnTaskLaunch属性,只要你一离开这个Task栈,则系统会马上清除这个Activity,

不管这个Activity在堆栈的任何位置.

 

 

http://hi.baidu.com/jieme1989/item/6e5f41d3f65be848ddf9beb9

【超详细】C#的单例模式 本文详细介绍了C#中的单例设计模式,包括两种实现方式:普通类泛型单例(Singleton<T>)和基于MonoBehaviour的组件单例(MonoSingleton<T>)。单例模式通过私有构造、静态私有实例和公共访问入口确保全局唯一实例,具有节省资源、保证数据一致性等优势。文章分别阐述了两者的核心原理、代码实现、使用场景及注意事项,并提供了日志管理器和音效管理器的具体应用示例。特别强调了多线程安全、初始化时机和避免过度使用等重要原则,为Unity开发中合理运用单例模式提供了全面指导。 阅读详情

相关推荐

COMSOL模拟CO2驱替CH4:多物理场耦合建模与工程应用详解

在非常规天然气开发与碳封存工程中,多孔介质内的渗流、吸附与岩石变形相互耦合,使得CO2驱替CH4的产能预测和CO2封存评估无法仅靠经验公式完成。以达西定律描述裂隙流动、以扩展Langmuir方程刻画竞争吸附、用应力-吸附-渗透率关系关联煤岩变形,是多物理场耦合数值模拟的核心路径。COMSOL Multiphysics凭借内置渗流、固体力学与组分传递接口,能够将这些机制整合为可参数化扫描的仿真模型,为注气压力、井距、渗透率演化等方案设计提供量化依据。围绕CO2驱替CH4模拟的建模流程、参数取法与结果判读,可形

weixin_29574585的博客 160

Intent中的Flag

Intent中的Flag Activity的加载模式受启动Activity的Intent对象中设置的Flag和manifest文件中Activity的<activity>元素的特性值交互控制。 Intentintent=newIntent(ReorderFour.this,ReorderTwo.class); intent.addF...

weixin_34309543的博客 178

5G-A无源物联网:深度解析“不插电“智能的底层技术原理

北京移动推出5G-A无源物联网技术,实现电动车标签"零功耗"运行。该技术通过射频能量收集(利用5G-A基站高功率信号转换为电能)和反向散射通信(调制反射信号传输数据)两大核心技术,使设备无需电池即可工作。5G-A相比4G在信号能量密度、通信速率和定位精度等方面显著提升,结合通感一体等创新技术,为无源物联网提供商用基础。该方案已在北京小区试点应用,实现电动车精准定位管理,标签寿命可达5年以上。专家预测,这项技术将大幅降低物联网部署成本,推动"万物智联"时代的到来。

通信行业老兵、物联网从业者,做一个有趣的普通人。 2010

Android Intent的FLAG标志详解

Android Intent的FLAG标志详解

silencefly的博客 2152

C# Log4Net不输出日志的解决方法

log4net是一个流行的 .NET 日志框架,用于记录应用程序的日志信息。如果你在使用log4net。

精通搬砖,资深技术砖家,在软件开发,人工智能,设备开发等领域都有研究。商业合作&交流学习可私信联系。 1263

WKWebView 白屏问题,WKWebView request body丢失问题

1,WKWebView 白屏问题 WKWebView 自诩拥有更快的加载速度,更低的内存占用,但实际上 WKWebView 是一个多进程组件,Network Loading 以及 UI Rendering 在其它进程中执行。初次适配 WKWebView 的时候,我们也惊讶于打开 WKWebView 后,App 进程内存消耗反而大幅下降,但是仔细观察会发现,Other Process 的内存占用会...

weixin_37543822的博客 735

Android Intent FLAG标识

Android Intent FLAG标识

Android framework 2668

Polyworks宏脚本开发入门:5分钟搞定环境搭建与基础命令录制

本文详细介绍了Polyworks宏脚本开发的入门指南,包括环境搭建、基础命令录制和核心对象操作。通过5分钟快速启动开发模式,掌握自动化操作流程和脚本调试技巧,帮助工程师高效完成工业测量与三维检测任务。

weixin_29306875的博客 533

Android Intent的FLAG标志

Android Intent的FLAG标志

Android应用开发工程师 938

152:vue+leaflet 判断一个点是否在一个电子围栏内

本文介绍了一个基于Vue+Leaflet的示例,演示如何判断点是否在电子围栏内。作者大剑师兰特(优快云知名博主)展示了使用polygon.getBounds().contains(latlng)方法检测点与多边形边界的关系。代码仅需80行,通过点击地图触发判断逻辑,结果显示提示信息。该技术可广泛应用于地理围栏、位置服务等场景,需要安装turf依赖。文章提供了完整源码和配置说明,适合GIS开发者学习参考。

大剑师兰特的GIS世界 756

Vue3 - 手机移动端H5网页强力解决弹起软键盘后页面被挤压变形或页面整体上移问题,点击input输入框键盘弹出底部被上推往上顶遮挡及各种问题(兼容安卓苹果ios手机,微信公众号网页微信内置浏览器)

vue3,h5网页,input输入框组件,vue3 h5软键盘弹出,vue3输入框,键盘弹起时页面整体上移问题,uni,H5页面,解决软键盘弹起页面被挤压、被往顶的问题,解决vue3输入框,键盘弹起时页面整体上移问题,vue3调用手机系统软键盘,页面窗口被顶起,布局定位失效,解决VUE3软键盘弹起导致页面fixed定位元素被顶上去,输入法软键盘弹起,窗口顶起,变形解决办法,Vue中input组件在IOS设备上弹出软键盘时页面整体上移问题的解决方案,以及input组件聚焦后弹出软键盘固定在,Vue3软键盘把界

🏆 前端领域优质创作者 1万+

android打印intent flag,Android flag详解

Android flag详解Android flag详解一.Flag标志位在阅读源码的时候经常发现有一些标志属性使用一些位操作来判断是否具有该标志,增加标志或者去除标志。如:二.addFlags(intflags)和setFlags(intflags)区别PublicIntentaddFlags(intflags)增加额外的标志到Intent(或者已经存在的flags值)参数fl...

weixin_42458937的博客 567

资源分享·病毒样本下载资源分享

一、微步云沙箱 微步在线云沙箱https://s.threatbook.cn/ 使用病毒sha256即可寻找病毒样本;该站点也可上传可疑文件/可疑URL地址到沙箱中,进行分析 。 以永恒之蓝为例,样本sha256是:ed01ebfbc9eb5bbea545af4d01bf5f1071661840480439c6e5babe8e080e41aa 下载样本或流量监控,需要消耗积分: 二、AnyRun Interactive Online Malware Analysis Sandbox.

不忘初心,护天下安全! 2万+

Android intent flag 详解

FLAG_ACTIVITY_BROUGHT_TO_FRONT   这个标志一般不是由程序代码设置的,如在launchMode中设置singleTask模式时系统帮你设定。FLAG_ACTIVITY_CLEAR_TOP   如果设置,并且这个Activity已经在当前的Task中运行,因此,不再是重新启动一个这个Activity的实例,而是在这个Activity上方的所有Activity都将关闭,

zj的博客 797

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Android Intent.FLAG详解

Android Intent.Flag标签详解

ZhangYida的专栏 723

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Android Intent Flag详解

Android 的一个特色就是 application A的activity可以启动 application B 的 activity,尽管 A 和 B 是毫无干系的,而在用户看来,两个场景紧密联系,视觉上二者构成了一个整体。Android 就是把这种误觉定义为 Task,它既不是 class,也不是 AndroidMainifest.xml 中的一个元素。从表现上看 Task 就像是一个 sta

zuokong的专栏 779

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Android: Intent FLAG 详解

public static final int FLAG_ACTIVITY_BROUGHT_TO_FRONT Since: API Level 1 This flag is not normally set by application code, but set for you by the system as described in the launchMode documentatio

3972

Android Intent FLAG详解,包括其他的标记的一些解释

2. Task默认行为: (1)前提: Activity A和Activity B在同一个应用中. 操作: Activity A启动开僻Task堆栈(堆栈状态: A), 在Activity A中启动Activity B(堆栈状态: AB), 按下BACK返回...

choulaowu8055的博客 444

android Intent flag详解

今天遇到了一个问题: 在Notification中启动activity 当该activity已经存在的情况下,重新创建了一个并把旧的销毁了。 分析原因应该是 TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); // Adds the back stack for the Intent (but not the In

superginger0的专栏 519

Android Intent.FLAG_NEW_TASK详解

没有博客园账号,无法收藏。所以就贴过来了。 本文大部分参考自 http://blog.youkuaiyun.com/mayingcai1987/article/details/6200909 ,对原文中的讲解FLAG_NEW_TASK地方加了一些自己的观点,用红色标记 1. Task是包含一系列Activity的堆栈, 遵循先进后出原则.  2. Task默认行为:      (1) 

valiantMan 549

Android Intent.FLAG_NEW_TASK详解,包括其他的标记的一些解释

此文转载而来,原因是android内核剖析中的一句话(当调用startActivity(intent)的FLAG为NEW_TASK时,AmS会首先从mHistory中找到指定Activity所在的Task,然后启动Task中的最后面一个Activity。) 本文大部分参考自http://blog.youkuaiyun.com/mayingcai1987/article/details/62009...

134
上一篇: UVA 488 - Triangle Wave
下一篇: android之intent的Flag详解
chiiis
博客等级 码龄14年 422粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值