Activity启动模式 及 Intent Flags 与 栈 的关联分析
来源:互联网 发布:淘宝达人直播怎么开通 编辑:程序博客网 时间:2024/06/01 19:24
转载 http://blog.csdn.net/vipzjyno1/article/details/25463457#plain
在学习Android的过程中,Intent是我们最常用Android用于进程内或进程间通信的机制,其底层的通信是以Binder机制实现的,在物理层则是通过共享内存的方式实现的。
1.什么是栈
栈
栈是一种常用的数据结构,栈只允许访问栈顶的元素,栈就像一个杯子,每次都只能取杯子顶上的东西,而对于栈就只能每次访问它的栈顶元素,从而可以达到保护栈顶元素以下的其他元素.”先进后出”或”后进先出”就是栈的一大特点,先进栈的元素总是要等到后进栈的元素出栈以后才能出栈.递归就是利用到了系统栈,暂时保存临时结果,对临时结果进行保护.定义栈栈的定义栈是限制仅在表的一端进行插入和删除运算的线性表。(1)通常称插入、删除的这一端为栈顶(Top),另一端称为栈底(Bottom)。 (2)当表中没有元素时称为空栈。(3)栈为后进先出(Last In First Out)的线性表,简称为LIFO表。栈的修改是按后进先出的原则进行。每次删除(退栈)的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除。栈的操作:压栈、弹栈 2.Activity中的栈
Android的管理主要是通过Activity栈来进行,当一个Activity启动时,系统会根据其配置将它压入到一个特定的栈中,系统处于运行状态。当用户点击返回或则FINISH()了该Activity,那么它便会被从栈中压出,随之摧毁,按照Activity的生命周期可以知道,如果当前显示的栈中Activity没有被摧毁,那么打开新的Activity时候,会将新打开的压入到栈,原来的根据其显示情况选择状态变化(原Activity依旧可见,变为暂停状态(Paused),如果被完成遮住了,转变为停止状态(Stopped))。
3.Task
4.Activity启动模式
"singleTop"
"singleTask"
"singleInstance"
以下举例说明它们的区别:
standard:Activity的默认加载方法,该方法会通过跳转到一个新的activity,同时将该实例压入到栈中(不管该activity是否已经存在在Task栈中,都是采用new操作)。例如: 栈中顺序是A B C D ,此时D通过Intent跳转到A,那么栈中结构就变成 A B C D A ,点击返回按钮的 显示顺序是 D C B A,依次摧毁。
singleTop:singleTop模式下,当前Activity D位于栈顶的时候,如果通过Intent跳转到它本身的Activity (即D),那么不会重新创建一个新的D实例,所以栈中的结构依旧为A B C D,如果跳转到B,那么由于B不处于栈顶,所以会新建一个B实例并压入到栈中,结构就变成了A B C D B。
singleTask:singleTask模式下,Task栈中只能有一个对应Activity的实例。例如:现在栈的结构为:A B C D。此时D通过Intent跳转到B,则栈的结构变成了:A B。其中的C和D被栈弹出销毁了,也就是说位于B之上的实例都被销毁了。
singleInstance:singleInstance模式下,会将打开的Activity压入一个新建的任务栈中。例如:Task栈1中结构为:A B C ,C通过Intent跳转到了D(D的模式为singleInstance),那么则会新建一个Task 栈2,栈1中结构依旧为A B C,栈2中结构为D,此时屏幕中显示D,之后D通过Intent跳转到D,栈2中不会压入新的D,所以2个栈中的情况没发生改变。如果D跳转到了C,那么就会根据C对应的launchMode的在栈1中进行对应的操作,C如果为standard,那么D跳转到C,栈1的结构为A B C C ,此时点击返回按钮,还是在C,栈1的结构变为A B C,而不会回到D。
5.Activity栈和Task联系
6.Intent Flags
7.Activity相关属性taskAffinity
Activity为Task拥有的一个affinity。拥有相同的affinity的Activity理论上属于相同的Task(在用户的角度是相同的“应用程序”)。Task的affinity是由它的根Activity决定的。
affinity决定两件事情——Activity重新宿主的Task(参考allowTaskReparenting特性)和使用FLAG_ACTIVITY_NEW_TASK标志启动的Activity宿主的Task。
默认情况,一个应用程序中的所有Activity都拥有相同的affinity。捏可以设定这个特性来重组它们,甚至可以把不同应用程序中定义的Activity放置到相同的Task中。为了明确Activity不宿主特定的Task,设定该特性为空的字符串。
如果这个特性没有设置,Activity将从应用程序的设定那里继承下来(参考<application>元素的taskAffinity特性)。应用程序默认的affinity的名字是<manifest>元素中设定的package名。
- Activity启动模式 及 Intent Flags 与 栈 的关联分析
- Activity启动模式 及 Intent Flags 与 栈 的关联分析
- Activity启动模式 及 Intent Flags 与 栈 的关联分析
- android面试02-Activity启动模式 及 Intent Flags 与 栈 的关联分析
- Activity启动模式 及 Intent Flags 与 栈 的关联分析
- Activity启动模式 及 Intent Flags 与 栈 的关联分析
- Activity启动模式 及 Intent Flags 与 栈 的关联分析
- Activity启动模式 及 Intent Flags 与 栈 的关联分析
- Activity启动模式 及 Intent Flags与栈的关联分析 .
- Activity启动模式 及 Intent Flags 与 栈 的关联分析
- Activity启动模式 及 Intent Flags 与 栈 的关联分析
- Activity四种启动模式 及 Intent Flags 与 栈 的关联分析
- Activity启动模式 及 Intent Flags 与 栈 的关联分析
- Activity启动模式 及 Intent Flags 与 栈 的关联分析
- Activity启动模式 及 Intent Flags 与 栈 的关联分析
- Activity 启动模式及Intent的Flags
- Activity启动模式 及 Intent Flags
- android Activity启动模式与intent Flags
- GDB动态库搜索路径
- iOS中的round/ceil/floorf函数略解
- 我该如何在这个行业存活下去
- SpringMVC集成Tiles2
- 广播(Broadcast内部机制讲解)
- Activity启动模式 及 Intent Flags 与 栈 的关联分析
- java选择排序SelectSort的代码和使用(包含清晰完成过程)
- 即时通讯云服务·融云开发者沙龙活动(10月份)公告
- 判断素数系列
- box2d b2Filter 碰撞过滤
- host 域名
- 【产品设计】互联网思维概念
- app从appstore上下载下来后崩溃。但是我手机曾用xcode装过,从appstore上下载就没有问题
- C#学习之值类型与引用类型