任务栈Task的模式
2015-08-11 19:38
190 查看
android每启动一个应用程序系统都会创建一个任务栈给这个应用。这个程序启动的activity都会加到这个栈中,activity的启动模式不同,在栈中存储销毁activity的方式也不同。在清单文件里可以设置activity的启动模式(红色标记出):
下面介绍一下4个启动模式
1、standard模式:系统默认的模式,即不管activity是否重复都会像栈里加入activity,因此在按返回键时每次销毁一个activity,因此按多次销毁任务栈里所有的activity才会退出程序。
2、singleTop模式:当一个activity指定为该模式时,在点击调用该activity时,会检测栈顶是否为该activity如果是就调用栈里的activity,否则才会重新创建一个新的activity放入栈里。
应该场景:如浏览器的添加书签activity,如果用户在添加书签的activity里添加了20书签,如果默认模式用户想退出书签需要按20次返回键,并创建20个activity到栈里浪费空间,应用该模式则只会创建一个书签activity,避免糟糕用户体验。
3、singleTask模式:当一个activity指定为该模式时,在加载该activity时候会检测栈里是否有该activity,如果有则直接调用栈里的activity,同时销毁掉调用activity上面的所有activity。
应该场景:如浏览器activity开销非常大,需要初始化webkit/c++嵌入式浏览器内核,将该activity配置成这个该模式。
4、singleInstance模式,该模式很极端,当一个activity指定为该模式时,调用该activity时系统不会将activity放入默认的分配的任务栈,而是创建一个新的任务栈放入新的任务栈内。并在默认的任务栈内引用新任务栈里的该activity,当再次调用该activity时候再次引用新建栈内的activity,当按返回键销毁该activity时候就会销毁新任务栈内的该activity,并且销毁默认任务栈内的对该activity的所有引用。
应该场景:适用全局都有的activity应该,可以节约内存。如有道词典,在每个界面activity都有调用查词的activity,我们可以将查词的activity配置为该模式。
<activity android:configChanges="keyboardHidden|orientation" android:launchMode="standard" android:name=".SecondActivity" android:label="secondactivity" > <intent-filter> <action android:name="com.example.multiactivity.SecondActivity" /> <action android:name="com.example.multiactivity.SecondActivity2" /> <action android:name="com.example.multiactivity.SecondActivity3" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
下面介绍一下4个启动模式
1、standard模式:系统默认的模式,即不管activity是否重复都会像栈里加入activity,因此在按返回键时每次销毁一个activity,因此按多次销毁任务栈里所有的activity才会退出程序。
2、singleTop模式:当一个activity指定为该模式时,在点击调用该activity时,会检测栈顶是否为该activity如果是就调用栈里的activity,否则才会重新创建一个新的activity放入栈里。
应该场景:如浏览器的添加书签activity,如果用户在添加书签的activity里添加了20书签,如果默认模式用户想退出书签需要按20次返回键,并创建20个activity到栈里浪费空间,应用该模式则只会创建一个书签activity,避免糟糕用户体验。
3、singleTask模式:当一个activity指定为该模式时,在加载该activity时候会检测栈里是否有该activity,如果有则直接调用栈里的activity,同时销毁掉调用activity上面的所有activity。
应该场景:如浏览器activity开销非常大,需要初始化webkit/c++嵌入式浏览器内核,将该activity配置成这个该模式。
4、singleInstance模式,该模式很极端,当一个activity指定为该模式时,调用该activity时系统不会将activity放入默认的分配的任务栈,而是创建一个新的任务栈放入新的任务栈内。并在默认的任务栈内引用新任务栈里的该activity,当再次调用该activity时候再次引用新建栈内的activity,当按返回键销毁该activity时候就会销毁新任务栈内的该activity,并且销毁默认任务栈内的对该activity的所有引用。
应该场景:适用全局都有的activity应该,可以节约内存。如有道词典,在每个界面activity都有调用查词的activity,我们可以将查词的activity配置为该模式。
相关文章推荐
- 第3章面向对象(上)
- 《Java开发实战经典》第三章答案3.2
- NOIP2013 D1 T2 国王游戏
- Linux学习笔记-----Linux安装
- 八皇后问题
- Permutations
- JSP页面提交到Servlet
- AndroidImageSlider
- ProGuard Version5.2(4.2)Manual-->Usage
- Js获取当前日期时间及其它操作
- 《Java开发实战经典》第三章答案3.1
- LeetCode之Flatten Binary Tree to Linked List
- 快速排序
- OGG "Loading data from file to Replicat"table静态数据同步配置过程
- 第十四章 端口
- Hibernate的事务管理
- Android中的动画(待续)
- 【坑】html5中使用context.lineWidth设置线的宽度是1,然而输出的宽度是2的原因
- jQuery的遍历
- 高并发系统类型