Activity的四种加载模式
2016-04-19 11:51
239 查看
配置Activity时可指定android:launchMode属性,该属性用于配置该Activity的加载模式,该属性支持4个属性值:
a) standard
每次通过这种模式来启动目标Activity时,Android总会为目标Activity创建一个新的实例,并将该Activity添加到当前Task栈中——这种模式不会启动新的Task,新的Activity将被添加到原有的Task中
b) singleTop
当将要启动的Activity已经位于Task栈顶时,系统不会重新创建目标Activity实例,而是直接复用已有的Activity实例。其他与standard模式基本相似
c) singleTask
采用这种加载模式的Activity在同一个Task内只有一个实例,当系统采用singleTask模式启动目标Activity时,可分为如下三种情况:
i. 如果将要启动的Activity不存在,系统将会创建目标Activity的实例,并将它加入Task栈顶
ii. 如果将要启动的Activity已经位于Task栈顶,此时与singleTop模式的行为相同
iii. 如果将要启动的Activity已经存在但是没有位于Task栈顶,系统将会把位于该Activity上面的所有Activity移除Task栈,从而使得目标Activity转入栈顶
d) singleInstance
这种加载模式下,系统保证无论从哪个Task中启动目标Activity,只会创建一个目标Activity实例,并会使用一个全新的Task栈来装载该Activity实例。当系统采用singleInstance模式启动目标Activity时,可以分为下面两种情况:
i.如果将要启动的目标Activity不存在,系统会先创建一个全新的Task、再创建目标Activity实例,并会将它加入新的Task栈顶
ii.如果将要启动的目标Activity已经存在,无论它位于哪个应用程序,无论它位于哪个Task中,系统将会把Activity所在的Task转到前台,从而使该Activity显示出来
注意:采用singleInstance模式加载Activity总是位于Task栈顶,采用singleInstance模式加载Activity所在Task只包含该Activity
为什么要指定加载模式?加载模式的作用?
在回答这个问题前,先介绍Android对Activity的管理:Android采用Task来管理多个Activity,当我们启动一个应用时,Android就会为之创建一个Task,然后启动这个应用入口Activity。Android并没有为Task提供API,只能调用Activity的getTaskId()方法来获取它所在的Task的ID。其实我们可以把Task理解成Activity栈,Task以栈的形式来管理Activity:先启动的Activity被放在Task栈底,后启动的Activity被放在Task栈顶
Activity的加载模式,就负责管理实例化、加载Activity的方式、并可以控制Activity与Task之间的加载关系
a) standard
每次通过这种模式来启动目标Activity时,Android总会为目标Activity创建一个新的实例,并将该Activity添加到当前Task栈中——这种模式不会启动新的Task,新的Activity将被添加到原有的Task中
b) singleTop
当将要启动的Activity已经位于Task栈顶时,系统不会重新创建目标Activity实例,而是直接复用已有的Activity实例。其他与standard模式基本相似
c) singleTask
采用这种加载模式的Activity在同一个Task内只有一个实例,当系统采用singleTask模式启动目标Activity时,可分为如下三种情况:
i. 如果将要启动的Activity不存在,系统将会创建目标Activity的实例,并将它加入Task栈顶
ii. 如果将要启动的Activity已经位于Task栈顶,此时与singleTop模式的行为相同
iii. 如果将要启动的Activity已经存在但是没有位于Task栈顶,系统将会把位于该Activity上面的所有Activity移除Task栈,从而使得目标Activity转入栈顶
d) singleInstance
这种加载模式下,系统保证无论从哪个Task中启动目标Activity,只会创建一个目标Activity实例,并会使用一个全新的Task栈来装载该Activity实例。当系统采用singleInstance模式启动目标Activity时,可以分为下面两种情况:
i.如果将要启动的目标Activity不存在,系统会先创建一个全新的Task、再创建目标Activity实例,并会将它加入新的Task栈顶
ii.如果将要启动的目标Activity已经存在,无论它位于哪个应用程序,无论它位于哪个Task中,系统将会把Activity所在的Task转到前台,从而使该Activity显示出来
注意:采用singleInstance模式加载Activity总是位于Task栈顶,采用singleInstance模式加载Activity所在Task只包含该Activity
为什么要指定加载模式?加载模式的作用?
在回答这个问题前,先介绍Android对Activity的管理:Android采用Task来管理多个Activity,当我们启动一个应用时,Android就会为之创建一个Task,然后启动这个应用入口Activity。Android并没有为Task提供API,只能调用Activity的getTaskId()方法来获取它所在的Task的ID。其实我们可以把Task理解成Activity栈,Task以栈的形式来管理Activity:先启动的Activity被放在Task栈底,后启动的Activity被放在Task栈顶
Activity的加载模式,就负责管理实例化、加载Activity的方式、并可以控制Activity与Task之间的加载关系
相关文章推荐
- cocos studio 3.10点击在windows平台运行报错 在windows平台运行 返回值1
- BZOJ 4539: [Hnoi2016]树
- java的Socket连接简单案例
- Linux 下java 中添加c++
- 区块链技术
- 多线程学习05-线程状态
- CALayer的介绍
- java大数据学习笔记(二) 线程池与应用
- C++学习笔记十五 - C++的类
- hashCode与equals源码分析与应用
- mybatis重复扫描package的问题
- js 小数点前面的0不显示
- redo和undo的区别
- 笔记sql语句
- js,javascript四舍五入round
- 南京理工大学第八届程序设计大赛count_prime
- js下读取或者设置input中的value值
- 欢迎使用CSDN-markdown编辑器
- 快速向表中插入大量数据Oracle中append与Nologging
- php使用 ajax操作购物车