Activity加载模式
2015-10-05 13:34
337 查看
Activity的加载模式:android:launchMode
1:standard(默认处理),不会使用全新的Task,在同一个Task,每次都新建Activity2:singleTop,如果目标activity已经位于Task栈顶,系统不会创建新的目标activity实例;如果没有目标activity位于Task栈顶,新建一个目标activity放入Task的栈顶
例;如果没有目标activity位于Task栈顶,新建一个目标activity放入Task的栈顶
3:singleTask,在同一个Task内只有一个实例activity
1) 如果启动的activity不存在,系统会创建目标activity的实例,加入Task栈顶
2) 如果启动的activity已经位于Task栈顶,不会重新创建目标activity的实例
3) 如果启动的activity已经存在,不在Task栈顶,系统将会把位于该activity上面的所有activity移出Task栈,使目标activity变为栈顶元素
4:singleInstance,无论从哪个Task中启动目标activity,只会创建一个目标activity的实例,并会使用一个全新的Task栈来装载该activity实例。这种模式activity总位于
Task栈顶,Task只包含该activity
1) 启动的目标activity不存在,会创建一个新Task,创建新目标activity的实例,并将它加入新Task栈顶
2) 启动的目标activity存在,无论位于哪个应用程序中,无论位于哪个Task中,系统将会把activity所在的Task转到前台,显示目标activity。
3) Android:exported=”true”表明该activity可以被其他应用启动
示例:
1. 首先说standard模式,也就是默认模式,不需要配置launchMode
创建一个ActivityA,通过按钮启动ActivityA,Task中会有若干个ActivityA的实例,按后退键让若干个ActivityA的实例出栈,最后退出应用。
2. singleTop和standard模式,都会将intent发送新的实例(后两种模式不发送到新的实例,如果已经有了的话)不过,singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例。上面的示例,如果将Activity的加载模式launchMode=”singleTop”,每次点击按钮启动ActivityA,不会创建ActivityA的实例,后退一次退出应用。
3. 上面两种模式,对应于ActivityA通过按钮启动ActivityB,两种模式的效果一样。
4. singleTask模式:singleTask模式和后面的singleInstance模式都是只创建一个实例的。当intent到来,需要创建singleTask模式Activity的时候,系统会检查栈里面是否已经有该Activity的实例。如果有直接将intent发送给它。上面的示例,如果将ActivityA的加载模式launchMode=”singleTask”,ActivityB的加载模式launchMode=”standard”,ActivityA通过按钮启动ActivityB,创建ActivityB的实例,ActivityB通过按钮启动ActivityA,不会创建ActivityA的实例,会使用原来的ActivityA的实例。
5. singleInstance模式:这个模式下的Activity单独在一个task栈中。这个栈只有一个Activity。
上面的示例:ActivityA通过按钮启动ActivityB,创建ActivityB的实例,而ActivityA在一个栈中,ActivityB在一个栈中,ActivityB通过按钮启动ActivityA,又创建ActivityA的实例,这个实例会放入上一个ActivityA的栈中,按后退键的时候,又回到ActivityA的栈中。
相关文章推荐
- [CareerCup] 10.3 Integer not Contain in the File 文件中不包含的数
- python+Eclipse+pydev环境搭建
- macbook装双系统多分区其实很简单,你只要把macbook当作一台普通pc就可以了!
- 匿名类的反射 属性描述器
- [NOIP2014]珠心算测验 T1
- 啃系列---Scikit Learn
- poj 3566 Building for UN(为联合国而建)
- URL重写
- jQuery UI基础----9jQurey UI Widgets-Datepicker(日期选择器
- 博客园的一个bug_修改文章标签
- jQuery UI基础----8jQuery UI Widgets-AutoComplete(自动补全
- 自己用C语言写dsPIC, PIC24单片机的serial bootloader
- 数据库常用操作
- C++:set_union is not a member of std;
- Hadoop ->> 关于数据分割(Data Split)的思考
- Docker免费空间申请-使用DaoCloud一键搭建Wordpress/Ghost博客
- LEETCODE-Plus One
- 编写JS脚本给mongodb添加一列为已有列的相关值
- c++11中的lambda表达式
- 布局方法