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

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

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. JavaScript实现动态轮播图效果

    功能描述: 1.鼠标经过 左右侧箭头显示,鼠标离开 箭头隐藏 2.动态添加底部小圆圈并绑定单击事件,并且让小圆圈的点击事件和左右箭头点击事件同步 3.拷贝第一张图片添加到ul最后可以实现动态添加图片 ...

  2. 集合系列 Queue(十一):ArrayDeque

    从名字我们可以看出,其实一个双向队列实现,而且底层采用数组实现. public class ArrayDeque<E> extends AbstractCollection<E> ...

  3. js中数组去重方法及性能对比

    js中数组的 数组去重 常用的数组去重方法以及效率分析: 首先我们先构建一个数组,主要是用于进行去重实验,我们主要实验的量级为1000,10000,100000,500000.具体的生成数组的方法如下 ...

  4. golang的make

    golang 分配内存主要有内置函数new和make,今天我们来探究一下make有哪些玩法. map只能为slice, map, channel分配内存,并返回一个初始化的值.首先来看下make有以下 ...

  5. 大数据学习笔记——HBase使用bulkload导入数据

    HBase使用bulkload批量导入数据 HBase可使用put命令向一张已经建好了的表中插入数据,然而,当遇到数据量非常大的情况,一条一条的进行插入效率将会大大降低,因此本篇博客将会整理提高批量导 ...

  6. vue解惑之v-on(事件监听指令)

    一.v-on指令 vue中用v-on指令来监听DOM事件,并触发相应的代码.比如v-on:click,表示监听了点击事件. 二.事件修饰符 在事件处理函数中调用 event.preventDefaul ...

  7. 一文解读RESTful (转)

    01 前言 回归正题,看过很多RESTful相关的文章总结,参齐不齐,结合工作中的使用,非常有必要归纳一下关于RESTful架构方式了,RESTful只是一种架构方式的约束,给出一种约定的标准,完全严 ...

  8. RU/RUR的安装

    RU/RUR的安装方法是仍然使用现有的Opatch技术来安装RU/RUR. 更多常见问题,请参考文档: Release Update and Release Update Revisions for ...

  9. SQL Server Agent作业执行CmdExec(bat)命令报权限问题

    写了一个bat命令,定期去清理一些SQL Server的Dump文件,然后配置成SQL Server作业,作业执行时报权限错误,具体错误信息如下所示: Message Executed as user ...

  10. Linux系统学习 十二、VSFTP服务—简介与原理

    1.简介与原理 互联网诞生之初就存在三大服务:WWW.FTP.邮件 FTP主要针对企业级,可以设置权限,对不同等级的资料针对不同权限人员显示. 但是像网盘这样的基本没有权限划分. 简介: FTP(Fi ...