在android里,有4种activity的启动模式,分别为:
“standard” (默认)
“singleTop”
“singleTask”
“singleInstance”

它们主要有如下不同:

1. 如何决定所属task
“standard”和”singleTop”的activity的目标task,和收到的Intent的发送者在同一个task内,除非intent包括参数FLAG_ACTIVITY_NEW_TASK。
如果提供了FLAG_ACTIVITY_NEW_TASK参数,会启动到别的task里。
“singleTask”和”singleInstance”总是把activity作为一个task的根元素,他们不会被启动到一个其他task里。

2. 是否允许多个实例
“standard”和”singleTop”可以被实例化多次,并且存在于不同的task中,且一个task可以包括一个activity的多个实例;
“singleTask”和”singleInstance”则限制只生成一个实例,并且是task的根元素。
singleTop要求如果创建intent的时候栈顶已经有要创建 的Activity的实例,则将intent发送给该实例,而不发送给新的实例。

3. 是否允许其它activity存在于本task内
“singleInstance”独占一个task,其它activity不能存在那个task里;如果它启动了一个新的activity,不管新的activity的launch mode 如何,新的activity都将会到别的task里运行(如同加了FLAG_ACTIVITY_NEW_TASK参数)。
而另外三种模式,则可以和其它activity共存。

4. 是否每次都生成新实例
“standard”对于没一个启动Intent都会生成一个activity的新实例;
“singleTop”的activity如果在task的栈顶的话,则不生成新的该activity的实例,直接使用栈顶的实例,否则,生成该activity的实例。
比如现在task栈元素为A-B-C-D(D在栈顶),这时候给D发一个启动intent,如果D是 “standard”的,则生成D的一个新实例,栈变为A-B-C-D-D。
如果D是singleTop的话,则不会生产D的新实例,栈状态仍为A-B-C-D
如果这时候给B发Intent的话,不管B的launchmode是”standard” 还是 “singleTop” ,都会生成B的新实例,栈状态变为A-B-C-D-B。

“singleInstance”是其所在栈的唯一activity,它会每次都被重用。

“singleTask”如果在栈顶,则接受intent,否则,该intent会被丢弃,但是该task仍会回到前台。

当已经存在的activity实例处理新的intent时候,会调用onNewIntent()方法
如果收到intent生成一个activity实例,那么用户可以通过back键回到上一个状态;如果是已经存在的一个activity来处理这个intent的话,用户不能通过按back键返回到这之前的状态。

[转]activity的启动方式(launch mode)相关推荐

  1. Android中Activity的四种启动方式

    谈到Activity的启动方式必须要说的是数据结构中的栈.栈是一种只能从一端进入存储数据的线性表,它以先进后出的原则存储数据,先进入的数据压入栈底,后进入的数据在栈顶.需要读取数据的时候就需要从顶部开 ...

  2. # android开发:4-1、Activity启动方式、生命周期、不同activity的数据传递

    4.Activity活动简介 什么是Activity: 如何创建Activity: Activity启动方式: Activity的生命周期: 不同Activity之间数据的传递: 什么是Activit ...

  3. Android中Service的启动方式及Activity与Service的通信方式

    Service启动的两种方式 1.通过startService启动 使用Service的步骤: 定义一个类继承Service 在Manifest.xml文件中配置该Service 使用Context的 ...

  4. Activity具体解释(生命周期、启动方式、状态保存,全然退出等)

    一.什么是Activity? 简单的说:Activity就是布满整个窗体或者悬浮于其它窗体上的交互界面. 在一个应用程序中通常由多个Activity构成,都会在Manifest.xml中指定一个主的A ...

  5. Activity的四种启动方式

    文章目录 Activity的四种启动模式 一.Android 任务栈 1.1 Android任务栈的概念 二.四种启动模式 2.1 standard 2.2 singleTop 2.3 singleT ...

  6. Android中Activity的启动流程和组织管理方式(Backstack、Task)

    前言: Android对Activity的组织管理会引入一些名词概念术语,像Stack.Task等,本文会做简单介绍.Activity的启动.切换以及组织管理会受不同的配置和属性的影响,本文会简单介绍 ...

  7. Android Activity的启动流程分析:以Launcher启动一个Activity为例,分析应用进程的创建、Activity的启动,以及他们和AMS之间的交互

    文章目录 一. Step1 - Step 11:Launcher通过Binder进程间通信机制通知ActivityManagerService,它要启动一个Activity: Step 1. Laun ...

  8. 四.Activity的启动流程-ActivityThread启动Activity的过程

    Activity的启动一般分为普通Activity的启动,根Activity的启动.而根Activity是指应用启动的第一个Activity过程,所以也可以理解为应用的启动过程. 相关内容链接:and ...

  9. 安卓activity的启动流程

    文章目录 前言 一.概述 二. 启动流程 2.1 Activity.startActivity 2.2 startActivityForResult 2.3 execStartActivity 2.4 ...

最新文章

  1. Silverlight 开发入门1
  2. 【已解决】Linux远程桌面连接-VNC
  3. innodb和my查询速度_mysql存储引擎MyISAM和InnoDB
  4. 一口气管理几十个中断不是问题
  5. 数学--数论--欧拉降幂--P5091 欧拉定理
  6. Caffe查看每一层学习出来的pattern
  7. python如何使用字典中的值并进行比较_python嵌套字典比较值与取值的实现示例
  8. ip地址合不合法怎么看_到底醇基燃料合不合法呢?
  9. 往map里的vector添加_面试官问我同步容器(如Vector)的所有操作一定是线程安全的吗?我懵了!...
  10. 代码敲慢一点,学得会快一点
  11. hashmap删除指定key_「集合系列」- 深入浅出分析HashMap
  12. BOM,DOM, JS,JQ
  13. centos7从有线切换到无线_TT G821 W1无线三模机械键盘体验:一个键盘满足所有应用场景...
  14. 通过MapReduce统计每个单子在每个文件中出现的次数(FileSplit的使用),单词作为key,所在文本和次数作为value进行统计...
  15. 免费不限速不限存储的网盘推荐
  16. 备考通信复试过程中的一些知识点总结梳理——移动通信系统Ⅱ
  17. 用html5实现一个播放器,6 个基于 HTML5 实现的多媒体播放器
  18. 光伏能给企业带来了哪些好处
  19. 网站统计中的数据收集原理及实现-埋点统计
  20. wap页面之iphone设备字体偏大问题

热门文章

  1. 赞一个 kindle电子书有最新的计算机图书可买了【Docker技术入门与实战】
  2. erlang的简单模拟半包的产生
  3. class.sitemap.php
  4. Enum 作为一个数据源绑定
  5. [Asp.net core]使用Polly网络请求异常重试
  6. iOS开发-UITableView常用方法
  7. 《Linux系统编程(第2版)》——2.6 关闭文件
  8. Redis 学习(二)
  9. 使用mongoose和bcrypt做认证
  10. 思科BFD协议帮助侦测网络失败