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

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

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. 「SAP技术」为正常库存管理的物料做成本中心采购会是什么结果?

    SAP 为正常库存管理的物料做成本中心采购会是什么结果? 这种采购可以正常进行,收货后SAP会更新采购订单里指定的费用类科目,而库存数量和库存价值都不会增加. 1, 如下物料号,是正常做库存管理的物料 ...

  2. 【iOS bug记录】UICollectionviewCell刷新变得这么莫名其妙?

    项目是一个即时聊天的社交软件,聊天流采用的是UICollectionView,随着进度的完善,发现一个特别的bug,UICollectionviewCell的复用,并没有直接insert进去,而是出现 ...

  3. Mongdb可视化工具Studio 3T的使用

    一.官网地址 https://studio3t.com/ 二.下载和安装 点击DOWNLOAD即可下载 按照自己电脑系统进行选择,然后填写邮箱和选择行业,第一次登录如果不提交不会下载,下载完成是一个z ...

  4. Linux-进程的观察

    16.1.1 进程与程序 ·程序 (program):通常为 binary program ,放置在储存媒体中 (如硬盘.光盘.软盘.磁带等), 为实体文 件的型态存在: ·进程 (process): ...

  5. python基础之字符串讲解(上)

    字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或者")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可.For example: 为str输入一个变量,p ...

  6. Webpack 一些概念

    目录 引子 Dependency Graph Runtime Manifest Module.Bundle.Chunk Bundle Splitting Code Splitting Tree Sha ...

  7. keras图片数据增强ImageDataGenerator

    datagen = ImageDataGenerator( rotation_range=40, width_shift_range=0.2, height_shift_range=0.2, shea ...

  8. 解决Entity 实体类中加了@Id 注解后仍然出现org.hibernate.AnnotationException: No identifier specified for entity 错误

    启动报错如下图所示: 解决方案: 查看网上的资料,大部分都说在实体类中没有添加加主键的注解@Id,这个是必须的.但是我的实体类中明明已经添加了@Id,为什么还会报这个错误呢? 后来检查了很久,发现是我 ...

  9. iviewer插件

    jQuery-iviewer插件的使用 iviewer是一个具有缩放和图像旋转功能的图像查看小部件. 在jQuery官网下载后,有很多文件. 直接把文件夹解压拖到项目里. 然后再html中引入主要的文 ...

  10. [转]UiPath Build Data Table

    本文转自:https://docs.uipath.com/activities/docs/build-data-table UiPath.Core.Activities.BuildDataTable ...