(本文转自:http://www.eoeandroid.com/blog-531377-3446.html)

(详细查看:http://blog.csdn.net/liuhe688/article/details/6754323)

说明一下,大家看这个帖子之前对Task,有一定的了解。而且看完这个之后,最好再看看taskAffinity属性,因为在实际应用中他们一般是联合使用的。

在Android的中Activity有4种启动方式:"standard"、"singleTop"、"singleTask"、"singleInstance"。

下面就分轻重点讲讲这些启动方式。
1、standard启动方式
这种方式也是系统默认的。说的简单点,我们在使用startActivity()方法的时候,系统就会启动一个新的Activity实例,不管它先前启动没有。如果想知道具体细节可以查看这个帖子http://marshal.easymorse.com/archives/2950,我在这里就不细细讲解了。
配图说明:
2、singleTop启动方式
如果大家把standard启动方式看懂了,这个我就说一下区别,大家就明白了。如果我们要调用的Activity在Task栈顶,系统不会像在standard方式下创建一个新的实例,而是调用onNewIntent()方法,来引导intent到栈顶的实例。如果调用的Activity不在Task栈顶,系统此时调用方式与standard方式下的一模一样。
举个例子:

现在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。

注意:在一个Activity处理新的intent的时候,用户不能使用Back button来返回到先前的Activity。直到新的intent到达onNewIntent()方法中后,才可以。

3、singleTask启动方式

如果已经有其他的Task并且包含Activity实例,那就直接调用那个Task的实例。(只有一个Task中会有) 而不是创建一个新的实例。重点:假如你启动一个singleTask的Activity,同时这个Activity在background task中,那么整个background task都会被调入到前台来。下面这幅图就很好的说明这个问题。

有人问如果我调用图中的Activity X,会怎样?系统会先把Activity Y销毁,然后再将Activity X放到前台。

4、singleInstance启动方式

singleInstance 新建一个Task,且在该Task中只有它的唯一一个实例。 (只有一个Task会有,且该Task中只有它)。“singleInstance”是其所在栈的唯一activity,它会每次都被重用。

总结:

standard  每次都会新建,每个Task都可以有,且每个Task都可以有多个实例(每个Task都可以有,且可以有多个)
singleTop 当前实例如果在栈顶,就不新建实例,调用其OnNewIntent。 如不在栈顶,则新建实例 (每个Task都可以有,且可以有多个,在栈顶时可复用)
singleTask 新建一个Task,如果已经有其他的Task并且包含该实例,那就直接调用那个Task的实例。(只有一个Task中会有)
singleInstance 新建一个Task,且在该Task中只有它的唯一一个实例。 (只有一个Task会有,且该Task中只有它)

intent的flag可以覆盖activity的启动模式:
FLAG_ACTIVITY_NEW_TASK  类似singleTask
FLAG_ACTIVITY_SINGLE_TOP 类似singleTop 
FLAG_ACTIVITY_CLEAR_TOP 无对应

补充说明,里面遗漏的东西。

用户一定要能够离开一个task,和再回到这个task。所以,"singleTask"和"singleInstance",只能用作启动Activity的属性。如果不这样,我们在启动一个singleTask的Activity之后,使用Home键到主界面,就会回不去了,因为它不代表一个应用的启动。

Android之android:launchMode的更多相关文章

  1. android开发——Android开发中的47个小知识

    1.判断sd卡是否存在  boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environme ...

  2. Android逆向-Android基础逆向(5)

    本文作者:i春秋作家——HAI_ 0×00 前言 不知所以然,请看 Android逆向-Android基础逆向(1)Android逆向-Android基础逆向(2)Android逆向-Android基 ...

  3. android:Cordova Android, hello Cordova ,PhoneGap android

    文章来自:http://blog.csdn.net/intbird 官方文档: http://cordova.apache.org/docs/en/5.0.0//index.html intbird的 ...

  4. [Android基础]Android四大组件之Activity总结

    1.Activity简介 Activity是Android一个非常重要的用户接口(四大组件之一),是可见的,主要是用户和应用程序之间进行交互的接口.在每个Activity中都可以放很多控件,所以也可以 ...

  5. [Android]《Android艺术开发探索》第一章读书笔记

    1. 典型情况下生命周期分析 (1)一般情况下,当当前Activity从不可见重新变为可见状态时,onRestart方法就会被调用. (2)当用户打开新的Activity或者切换到桌面的时候,回调如下 ...

  6. Android笔记——Android自定义控件

    目录: 1.自定义控件概述 01_什么是自定义控件 Android系统中,继承Android系统自带的View或者ViewGroup控件或者系统自带的控件,并在这基础上增加或者重新组合成我们想要的效果 ...

  7. [Android Pro] Android开发实践:自定义ViewGroup的onLayout()分析

    reference to : http://www.linuxidc.com/Linux/2014-12/110165.htm 前一篇文章主要讲了自定义View为什么要重载onMeasure()方法( ...

  8. [Android Pro] Android开发实践:为什么要继承onMeasure()

    reference to : http://www.linuxidc.com/Linux/2014-12/110164.htm Android开 发中偶尔会用到自定义View,一般情况下,自定义Vie ...

  9. Android 基于Android的手机邮件收发(JavaMail)之三(邮件接收)

    初次做这个程序的时候,是仿照着网上别人的程序做的.因为本人比较菜,是一个新手,以前的基础知识没有学好,所以尽管有了别人的代码但是还是不知道怎么在界面上显示出它的效果来,废话不多少,现在就贴出我的参考程 ...

  10. 2.[WP Developer体验Andriod开发]Andriod Studio结合Visual Studio Emulator for Android调试Android App

    0. 工欲善其事必先利其器 上一篇博客对比了一下Android和WinPhnoe的布局容器,后续篇章重点放在Android的开发上了. 说到开发就绕不开调试程序,调试Android App我们有2种选 ...

随机推荐

  1. jackson error 含义log

    1. 反序列化失败,类型不匹配 Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserial ize ...

  2. js赋值运算的理解

    简介 js引擎由于为了效率,很多时候的非直接量赋值都不是copy一份在赋值给新的变量,而是一个引用 ps:直接量:直接值数字字符串等 为什么使用len = doms.length; 里的len效率要比 ...

  3. vue+sass 下sass不能运行问题

    好久没写博文了,今天抽空写一写,最近在用vue.js build 项目,今早想使用sass来编译css,可是安装好依赖包之后仍然显示一下错误: ERROR in ENOENT: no such fil ...

  4. jQuery自动与手动图片切换效果下载

    效果图: 查看效果:http://hovertree.com/jq/hovertreeimg/ 下载:http://hovertree.com/h/bjaf/gk8mko69.htm 使用代码: &l ...

  5. 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间

    [源码下载] 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间 作者:webabcd 介绍速战速决 之 PHP 动态地创 ...

  6. 使用block进行界面之间的反向传值

    目标:在两个独立的控制器的界面之间进行反向传值 关键技术:block 代码编写及运行环境:Xcode6.4 / 模拟器8.4 语言:Objective-C 注:使用纯代码实现,不使用xib/story ...

  7. CSS:CSS样式表及选择器优先级总结

    我们在写网页的时候经常会遇到同一个HTML文件,使用了外部样式.内部样式以及内联样式,那么如果发生冲突时浏览器是怎么抉择的呢? 也会遇到这样的情况,在样式表中,对同一个HTML元素,我们有可能既用到了 ...

  8. Xdebug文档(五) 代码覆盖分析

    代码覆盖分析能在请求时让你知道脚本哪一行(或哪一段)在执行. 相关设置 xdebug.coverage_enable 类型: boolean, 默认值: 1, 始于 Xdebug >= 2.2 ...

  9. 【单页应用】view与model相关梳理

    前情回顾 根据之前的学习,我们形成了一个view与一个messageCenterview这块来说又内建了一套mvc的东西,我们这里来理一下首先View一层由三部分组成:① view② dataAdpt ...

  10. web前端交互性易用性说明

    总结一下我们在web前端开发过程中总是强调交互性.易用性的情况分析说明.个人觉得web前端的易用交互也就是我们所说人性化操作.不外乎希望达到的效果为:界面风格简洁明了.重点突出:操作简单,直观可见.当 ...