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)(三)四种工作模式相关推荐

  1. [转]AndroidManifest.xml文件详解

    转自:http://www.cnblogs.com/greatverve/archive/2012/05/08/AndroidManifest-xml.html AndroidManifest.xml ...

  2. AndroidManifest.xml 文件详解

    AndroidManifest.xml 文件详解 AndroidManifest.xml 文件详解 概述 文件特性 包名和应用ID(application ID) 应用程序组件(App compone ...

  3. AndroidManifest.xml文件详解

    更多原文,请见:http://mobile.51cto.com/aprogram-340646.htm AndroidManifest.xml文件是Android系统重要的权限申请和定义配置文件,程序 ...

  4. AndroidManifest.xml文件详解(application)

    http://blog.csdn.net/think_soft/article/details/7557101 语法(SYNATX): <application android:allowTas ...

  5. AndroidManifest.xml文件详解(receiver)

    语法(SYNTAX): <receiverandroid:enabled=["true" | "false"]           android:exp ...

  6. AndroidManifest.xml文件详解(uses-sdk)

    语法(SYNTAX): <uses-sdkandroid:minSdkVersion="integer"           android:targetSdkVersion ...

  7. mybatis 鉴别其_MyBatis之Mapper XML 文件详解(四)-JDBC 类型和嵌套查询

    MyBatis之Mapper XML 文件详解(四)-JDBC 类型和嵌套查询 白玉 IT哈哈 支持的 JDBC 类型 为了未来的参考,MyBatis 通过包含的 jdbcType 枚举型,支持下面的 ...

  8. AndroidManifest.xml配置文件详解

    AndroidManifest.xml配置文件详解 . AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查 ...

  9. schema约束文档与xml文件详解

    schema约束文档与xml文件详解 1.前言 2.schema约束文档(.xsd文件) 2.1 targetNameSpace 2.2官方文档与自定义文档的关系 2.3 声明名称空间 2.4 sch ...

最新文章

  1. Android事件分发机制解析
  2. 浅说Java中的反射机制(一)
  3. FCKeditor的使用说明
  4. 基础练习 FJ的字符串
  5. bfc是什么_全面分析总结BFC原理及实践
  6. Python自动化之列表
  7. 14.卷1(套接字联网API)---高级IO函数
  8. 超维android10框架什么功能,基于Android系统深度定制,努比亚阿尔法搭载α OS带来新交互...
  9. anaconda下载与spyder的报错解决
  10. STM32开发环境安装
  11. NodeJS 搭建图形识别功能
  12. mysql 完美卸载
  13. 反思专家型领导---转载--读后感
  14. Basler驱动如何彩色相机白平衡说明
  15. MYSQL多表联合查询排序
  16. 欧盟CE法规及标准查询常用网站
  17. 网站SEO优化基本流程是什么?看完就明白了!
  18. win7需要计算机管理员权限,关于告诉你win7系统提示“需要管理员权限”的修复办法...
  19. Form表单 JSON Content-type解析
  20. 树型结构(数据结构)

热门文章

  1. Python selenium根据class定位页面元素,xpath定位
  2. 用jk触发器构成二分频电路_实例分析,轻松掌握声控照明电路
  3. select子查询多个字段_SQL复杂查询
  4. 用python画出小人发射爱心_小人发射爱心biu简笔画表情-biu小人简笔画表情动态完整版-东坡下载...
  5. 几个UI Prototype应用的使用感受
  6. 屏蔽firefox浏览器连接失败页面的广告
  7. 【日志】2011.12.24
  8. 一个LINUX高手写给初学者的话(转)
  9. 如何查询当前手机的cpu架构,so库导入工程又出异常了?
  10. uniapp、vue,vuex中state改变,getters不动态改变的完美解决方案!