Activity四种启动模式
2016-03-13 01:19
399 查看
转自:http://blog.csdn.net/zxzzxz7531230/article/details/50496319
Activity四种启动模式:
standard
singleTop
singleTask
singleInstance
在说Activity之前,我们先来介绍一个小知识点:栈。为什么会介绍栈呢?主要在于Activity四种启动模式在内存中其实是以栈这种数据结构存储的。如果能比较好的理解栈也就能更好的理解Activity四种启动模式。
栈(stack)作为一个先进后出(FILO)的数据结构,与队列一个先进先出(FIFO)非常类似。通俗你可以把它理解 洗盘子时叠起来的盘子,堆在最上面的先出去(先进后出),压在最下面的最后出去。(注:文章中的A B C D字母 都是指的activity)
standard作为activity的默认启动模式,非常像栈(stack)的先进后出,G处于最上面,A处于最下面。ActivityManager维护着一个充满activity的栈,第一个A通常是APP的入口activity,如图左边一样顺序添加A B C D E F G ,然后按照G F E D C B A的顺序退出栈列。
理解了standard启动模式 其实其他三个模式都很好理解,英文单词前缀都是single单例,后面接着是三种情况的单例,singleTop 可以理解为栈顶唯一,我们画图举例说明
在已经存在 A B C D 栈列中再添加一个新的D,ActivityManager并不会新建一个D,而是选择复用原来的D来保持singleTop中的唯一性。如果栈顶为D,此时添加一个E后再添加一个D会是什么情况呢?
上面的问题如果在singleTop模式,栈中会有两个D。因为在添加第二个D的时候此时栈顶为E,那么在singleTask中会是什么情况呢?
在singleTask中,只能存在一个Activity 如果再添加一个相同的Activity ,ActivityManager会把在前一个相同的activity之后添加的activity全删掉(我自己读起来都有点晕,可以参照上图理解),并把这个activity置于栈顶来保持singleTask模式中的唯一性。
这种启动模式比较特殊,因为它会启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入。我比较是喜欢用代码来实现
Activity四种启动模式:
standard
singleTop
singleTask
singleInstance
在说Activity之前,我们先来介绍一个小知识点:栈。为什么会介绍栈呢?主要在于Activity四种启动模式在内存中其实是以栈这种数据结构存储的。如果能比较好的理解栈也就能更好的理解Activity四种启动模式。
栈(stack)作为一个先进后出(FILO)的数据结构,与队列一个先进先出(FIFO)非常类似。通俗你可以把它理解 洗盘子时叠起来的盘子,堆在最上面的先出去(先进后出),压在最下面的最后出去。(注:文章中的A B C D字母 都是指的activity)
standard
standard作为activity的默认启动模式,非常像栈(stack)的先进后出,G处于最上面,A处于最下面。ActivityManager维护着一个充满activity的栈,第一个A通常是APP的入口activity,如图左边一样顺序添加A B C D E F G ,然后按照G F E D C B A的顺序退出栈列。
singleTop
理解了standard启动模式 其实其他三个模式都很好理解,英文单词前缀都是single单例,后面接着是三种情况的单例,singleTop 可以理解为栈顶唯一,我们画图举例说明 在已经存在 A B C D 栈列中再添加一个新的D,ActivityManager并不会新建一个D,而是选择复用原来的D来保持singleTop中的唯一性。如果栈顶为D,此时添加一个E后再添加一个D会是什么情况呢?
singleTask
上面的问题如果在singleTop模式,栈中会有两个D。因为在添加第二个D的时候此时栈顶为E,那么在singleTask中会是什么情况呢? 在singleTask中,只能存在一个Activity 如果再添加一个相同的Activity ,ActivityManager会把在前一个相同的activity之后添加的activity全删掉(我自己读起来都有点晕,可以参照上图理解),并把这个activity置于栈顶来保持singleTask模式中的唯一性。
singleInstance
这种启动模式比较特殊,因为它会启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入。我比较是喜欢用代码来实现 <code class="hljs avrasm has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"> Intent i = new Intent(Intent<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.ACTION</span>_MAIN)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span> i<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.setClassName</span>(activityInfo<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.applicationInfo</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.packageName</span>,activityInfo<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.name</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span> i<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.addFlags</span>(Intent<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.FLAG</span>_ACTIVITY_NEW_TASK)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span> startActivity(i)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span></code>
相关文章推荐
- python - 抓取页面上的链接
- css3动画,阴影,加快页面加载,块级模式的小总结
- 面试感悟----一名3年工作经验的程序员应该具备的技能(转载自@五月的仓颉)
- 对自己VPS的一次安全检测
- python web框架企业实战详解(第六期)\第四课时-webpy&django
- Retrofit——Java(Android) 的REST 接口封装类库(相当于IOS中的restkit)
- 如何统计指定目录下的文件个数
- Android_获取当前的版本号和版本名称,获取SIM卡的信息
- python web框架企业实战详解(第六期)\第一课时-sorted&if&for
- 不再使用php做爬虫
- python web框架企业实战详解(第六期)\第二课时-pickle&__eq__
- 复利单利计算的功能解释
- JavaIO流个人总结,Much Demo
- python web框架企业实战详解(第六期)\第三课时-ajax&jquery&webpy
- eclipse+maven3.3.9搭建
- 三、nginx301跳转302跳转
- com.android.dex.DexException finished with non-zero exit value 2 等异常解决办法思路
- android四大组件(详细总结)
- python web框架企业实战详解(第六期)\第三课时-css&bootstrap
- 远程桌面不能拷贝文件的问题