本系列文章目录更多精品文章分类

本系列持续更新中....

Activity 的启动模式一共有四种,分别是:standard、singleTop、singleTask、singleInstance 。在实际开发中根据特定的需求选择不同的启动模式。

启动模式的指定,在 AndroidManifest 中通过给 <activity> 标签指定 android:launchMode 属性来选择启动模式。下面来逐一学习。

2.5.1 standard

这种启动模式是 Activity 的默认启动模式。在不进行任何显示指定的情况下,所有的 Activity都是自动使用这种模式启动。前面我们学习过 Android 是通过返回栈来管理 Activity 的。在 standard 模式下,每次启动一个新的 Activity,就会在返回栈中入栈,并且处于栈顶的位置。在这种模式下,系统不会在乎这个 Activity 是否已经在返回栈中了,每次启动都会创建一个新的 Activity。

2.5.2 singleTop

有些情况下你可能觉得 standard 模式不合理,明明已经在栈顶了,为什么再次启动的时候还要创建一个 Activity 实例呢?

这个时候 singleTop 模式就排上用场了,在启动 Activity 的时候如果发现返回栈的栈顶已经是该 Activity 了,则认为可以直接使用它,不会再创建新的 Activity 。

2.5.3 singleTask

使用 singleTask 可以解决重复创建栈顶 Activity 的问题。但是如果 Activity 没有在栈顶的位置,还是可能会创建多个 Activity。

那么有什么版本可以让某个 Activity 在整个应用程序的上下文中只存在一个实例呢?

就要借助 singleTask 模式了,当 Activity 的启动模式指定为 singleTask 的时候,每次启动该 Activity 系统会首先在返回栈中检查是否存在该 Activity的实例,如果已经发现存在了,则直接使用,并 把这个 Activity 上面的所有的 Activity 全部移除栈 如果没有发现,则创建一个新的 Activity 实例。

2.5.4 singleInstance

这个种模式是四种启动模式中最特殊的最复杂的一个了。指定为 singleInstance 模式的 Activity 会启用一个新的返回栈来管理这个 Activity (其实如果 singleTask 模式指定了不同的 taskAffinity,也会启动一个新的返回栈)。这种启动模式的意义?假设一个 Activity 是允许其他的应用程序调用的,我们想实现其他应用程序和我们的应用程序共享这个实例,这个时候使用前面三种方式是无法实现的,因为每个应用程序都会有自己的返回栈,同一个 Activity 在不同的返回栈中入栈时必然是创建了新的实例。而使用 singleInstance 模式就可以解决这个问题了。

这种模式下会有一个单独的返回栈来管理这个 Activity,不管哪个应用程序来访问这个 Activity 都共用一个 返回栈,也就解决了共享 Activity 实例的问题。

在 Activity 中可以通过 getTaskId() 来获取返回栈的 id。

做一个实验:一个程序有 Activity A 、Activity B、Activity C ,其中 A 和 B 都是普通启动模式也就是 standard 模式,C 是 singleInstance 模式。

启动 A ,然后在 A 中启动 C,C 中启动 B。然后依次返回,看到的页面顺序是:B-->A--->C

从系统学Android--2.5Activity启动模式的更多相关文章

  1. android Activity的启动模式

    Android中Activity启动模式详解   在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启 ...

  2. Android中的启动模式(下)

    在这篇文章中,我会继续跟大家分享有关于Android中启动模式的相关知识.当然,如果对这个启动模式还不完全了解或者没有听过的话,可以先看看我之前写的有关于这个知识点的入门篇Android的启动模式(上 ...

  3. Android中Activity启动模式详解

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. An ...

  4. Android Studio 活动启动模式

    启动模式一共分4种 可以再配置文件中设置 <activity android:name=".MainActivity" android:launchMode="si ...

  5. Android活动的启动模式

    1. standard 标准模式,是活动默认的启动模式,在不进行显示指定的情况下,所有活动都会自动使用这种模式. Android使用返回栈管理活动,在standard模式下,每当启动一个新的活动,它就 ...

  6. Android四种启动模式

    四种启动模式 standard(默认) singleTop singleTast singleInstance standard(默认) 系统默认的启动模式. Android是使用返回栈来管理活动的, ...

  7. Android开发——Activity启动模式详解

    1. Activity的启动模式 本文原创,转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52054893 1.1 Standard标 ...

  8. 74.Android之四种启动模式

    转载:http://www.cnblogs.com/meizixiong/archive/2013/07/03/3170591.html 一.启动模式介绍 启动模式简单地说就是Activity启动时的 ...

  9. android 4种启动模式

    在android里,有4种activity的启动模式,分别为: “standard” (默认) “singleTop” “singleTask” “singleInstance” 它们主要有如下不同: ...

随机推荐

  1. puppet5.1 安装与配置

    一.Puppet概念 简介 当服务器数量达到一定的规模时,仅依靠人为完成批量部署服务器个资源的配置,运维工作将变得繁琐且容易出错,为了解决这一问题,我们应该怎么办呢?我们可以引入一批工具,这批工具可编 ...

  2. iOS开发makeKeyAndVisible和makeKeyWindow区别

    参考链接:https://www.jianshu.com/p/c7647caa8bd1

  3. Android开发模版代码(4)——状态栏设置

    下面的代码是基于开源项目SystemBarTint,我们需要添加其依赖 compile 'com.readystatesoftware.systembartint:systembartint:1.0. ...

  4. Linux 使用grep过滤多个条件及grep常用过滤命令

    这篇文章主要介绍了Linux 使用grep筛选多个条件及grep常用过滤命令,需要的朋友可以参考下 cat log.txt | grep 条件: cat log.txt | grep 条件一 | gr ...

  5. 如何从Mac删除恶意广告软件,摆脱那些通过弹出广告或工具栏入侵Mac的恶意软件

    厌倦了那些利用弹出式广告和工具栏之类入侵Mac的恶意软件?该如何摆脱Mac上的恶意软件呢?今天小编为大家带来两种方法从Mac 删除广告软件,甚至阻止它到达您的Mac,感兴趣的朋友一起来看看吧! 方法一 ...

  6. Python定做一个计算器,小而美哒~

    使用qt designer ,按装anaconda后,在如下路径找到: conda3.05\Library\bin designer.exe文件,双击启动: ​ 创建窗体,命名为XiaoDing,整个 ...

  7. JCC 指令

    JCC跳转指令 JCC指条件跳转指令,CC就是指条件码. JCC指令 中文含义 英文原意 检查符号位 典型C应用 JZ/JE 若为0则跳转:若相等则跳转 jump if zero;jump if eq ...

  8. Java集合内容

    Java的集合类定义在java.util包中,支持泛型,主要提供了3种集合类,包括List,Set和Map.Java集合使用统一的Iterator遍历. 1.List遍历 实现了Iterator接口的 ...

  9. 微信支付 第三篇 微信调用H5页面进行支付

    上一篇讲到拿到了 预支付交易标识 wx251xxxxxxxxxxxxxxxxxxxxxxxxxxxxx078700 第四步,是时候微信内H5调起支付了! 先准备网页端接口请求参数列表 微信文档中已经明 ...

  10. MySQL8.0+常用命令

    开启远程访问 通过以下命令开启root用户远程访问权限: CREATE USER 'root'@'%' IDENTIFIED BY 'password'; GRANT ALL ON *.* TO 'r ...