AndroidManifest.xml文件详解(activity)(三)四种工作模式
android:launchMode
这个属性定义了应该如何启动Activity的一个指令。有四种工作模式会跟Intent对象中的Activity标记(FLAG_ACTIVITY_*常量)结合在一起用来决定被调用Activity在处理Intent对象时应该发生的事情,这四种模式是:
standard
singleTop
singleTask
singleInstance
默认的模式是standard。
像下表显示的那样,这四种模式被分成两组,standard和singleTop为一组,singleTask和singleInstance为一组。带有standard和singleTop启动模式的Activity能够被实例化多次。其实例能够属于任何任务,并且能够在Activity的堆栈中被定为。通常是调用startActivity()方法把它们加载到任务中(除非Intent对象包含了一个FLAG_ACTIVITY_NEW_TASK指令,这种情况下会选择启动一个新的任务。)
相比之下,singleTask和singleInstance启动模式的Activity只能启动一个任务。它们始终是Activity堆栈的根节点。并且设备每次只能拥有一个这样的Activity---只有一个这样的任务。
standard和singleTop模式彼此在一个方面有所不同:对于standard启动模式的Activity,每次要有一个新的Intent对象才能启动,系统会创建一个新的Activity类的实例来响应Intent对象的请求。每个实例处理一个Intent对象。同样,singleTop启动模式的Activity也会创建一个新的实例来处理一个新的Intent对象。但是,如果目标任务中在堆栈的顶部已经有了这个Activity的实例,那么这个实例会接受这个新的Intent对象(在onNewIntent()回调方法中调用);而不是创一个新的Activity实例。另一种情况,如:如果singleTop启动模式的Activity的一个实例,在目标任务中已经存在,但是它没有在任务堆栈的顶部,或者是在堆栈的顶部,却不是目标任务,那么就会创建一个新的Activity实例,并把它压入目标任务堆栈。
singleTask和singleInstance模式彼此也在一个方面有所不同:singleTask模式的Activity,允许其他Activity作为它所在任务的一部分。它始终在所在任务的根节点,但是其他的Activity(需要是standard和singleTop模式的Activity)能够被加载到它的任务中。而singleInstance模式的Activity,不允许其他的Activity做它所在任务的一部分。它是其任务中唯一的Activity。如果要启动另外的Activity,那么被启动的Activity要关联到不同的任务中---就像是在Intent对象中设置了FLAG_ACTIVITY_NEW_TASK标记一样。
使用场景 |
启动模式 |
支持多实例吗? |
解释 |
针对大多数Activity的启动模式 |
standard |
Yes |
默认启动模式,系统总是在目标任务中创建一个新的Activity实例,并把Intent对象发送给它。 |
singleTop |
有条件的 |
如果这中模式的Activity始终存在与目标任务堆栈的顶部,系统就会通过调用它的onNewIntent()方法,把Intent对象发送给这个实例,而不是创建一个的Activity实例。 |
|
特殊的启动模式,通常不推荐使用。 |
singleTask |
No |
系统在一个新任务堆栈的根节点处创建这个Activity,并且把Intent对象发送给它。但是,如果这个Activity的实例已经存在,系统就会通过调用它的onNewIntent()方法,把Intent对象发送给这个实例,而不是创建一个的Activity实例。 |
singleInstance |
No |
除了系统不能把其他的Activity加载到该Activity实例所归属的任务中之外,其他与singleTask模式相同。这种模式的Activity始终是单独存在的,并且是其任务中唯一的成员 |
如上表所示,standard模式是默认模式,并且适用于大多数Activity。singleTop也是一种通用的,且被很多Activity类型所使用的启动模式。其他模式(singleTask和singleInstance)是不推荐给大多数应用程序使用的,因为它们会产生用户不熟悉的交互模式,并且与大多数应用程序也会产生差异。
不管选择了那种启动模式,都要测试Activity在启动期间的可用性,并且在使用Back按钮时能够返回到其他的Activity和任务。
AndroidManifest.xml文件详解(activity)(三)四种工作模式相关推荐
- [转]AndroidManifest.xml文件详解
转自:http://www.cnblogs.com/greatverve/archive/2012/05/08/AndroidManifest-xml.html AndroidManifest.xml ...
- AndroidManifest.xml 文件详解
AndroidManifest.xml 文件详解 AndroidManifest.xml 文件详解 概述 文件特性 包名和应用ID(application ID) 应用程序组件(App compone ...
- AndroidManifest.xml文件详解
更多原文,请见:http://mobile.51cto.com/aprogram-340646.htm AndroidManifest.xml文件是Android系统重要的权限申请和定义配置文件,程序 ...
- AndroidManifest.xml文件详解(application)
http://blog.csdn.net/think_soft/article/details/7557101 语法(SYNATX): <application android:allowTas ...
- AndroidManifest.xml文件详解(receiver)
语法(SYNTAX): <receiverandroid:enabled=["true" | "false"] android:exp ...
- AndroidManifest.xml文件详解(uses-sdk)
语法(SYNTAX): <uses-sdkandroid:minSdkVersion="integer" android:targetSdkVersion ...
- mybatis 鉴别其_MyBatis之Mapper XML 文件详解(四)-JDBC 类型和嵌套查询
MyBatis之Mapper XML 文件详解(四)-JDBC 类型和嵌套查询 白玉 IT哈哈 支持的 JDBC 类型 为了未来的参考,MyBatis 通过包含的 jdbcType 枚举型,支持下面的 ...
- AndroidManifest.xml配置文件详解
AndroidManifest.xml配置文件详解 . AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查 ...
- schema约束文档与xml文件详解
schema约束文档与xml文件详解 1.前言 2.schema约束文档(.xsd文件) 2.1 targetNameSpace 2.2官方文档与自定义文档的关系 2.3 声明名称空间 2.4 sch ...
最新文章
- Android事件分发机制解析
- 浅说Java中的反射机制(一)
- FCKeditor的使用说明
- 基础练习 FJ的字符串
- bfc是什么_全面分析总结BFC原理及实践
- Python自动化之列表
- 14.卷1(套接字联网API)---高级IO函数
- 超维android10框架什么功能,基于Android系统深度定制,努比亚阿尔法搭载α OS带来新交互...
- anaconda下载与spyder的报错解决
- STM32开发环境安装
- NodeJS 搭建图形识别功能
- mysql 完美卸载
- 反思专家型领导---转载--读后感
- Basler驱动如何彩色相机白平衡说明
- MYSQL多表联合查询排序
- 欧盟CE法规及标准查询常用网站
- 网站SEO优化基本流程是什么?看完就明白了!
- win7需要计算机管理员权限,关于告诉你win7系统提示“需要管理员权限”的修复办法...
- Form表单 JSON Content-type解析
- 树型结构(数据结构)
热门文章
- Python selenium根据class定位页面元素,xpath定位
- 用jk触发器构成二分频电路_实例分析,轻松掌握声控照明电路
- select子查询多个字段_SQL复杂查询
- 用python画出小人发射爱心_小人发射爱心biu简笔画表情-biu小人简笔画表情动态完整版-东坡下载...
- 几个UI Prototype应用的使用感受
- 屏蔽firefox浏览器连接失败页面的广告
- 【日志】2011.12.24
- 一个LINUX高手写给初学者的话(转)
- 如何查询当前手机的cpu架构,so库导入工程又出异常了?
- uniapp、vue,vuex中state改变,getters不动态改变的完美解决方案!