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

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

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. 基于JS的ajax的实现,JSON和JSONP,基于JQuery的ajax的实现

    基于JS的ajax的实现,JSON和JSONP,基于JQuery的ajax的实现1.基于JS的ajax的实现 step1: var xmlhttp = XMLHttprequest() #实例化一个对 ...

  2. docker学习笔记---基本命令

    [root@docker ~]# docker Usage: docker [OPTIONS] COMMAND A self-sufficient runtime for containers Opt ...

  3. Redis学习(二)Redis的安装

    Window 下安装 下载地址:https://github.com/MSOpenTech/redis/releases. Redis 支持 32 位和 64 位.这个需要根据你系统平台的实际情况选择 ...

  4. WinCC的电子签名与审计追踪

    如何写入审计追踪记录 用脚本向Audit中添加记录有两种方法,一种方法是用InserAuditEntryNew函数写入,另一种方法是生成属于“操作员输入消息”类型的报警消息,该报警消息会记录到Audi ...

  5. 第1章:C++泛型技术基础:模板——《C++泛型:STL原理和应用》读书笔记整理

    第1章:C++泛型技术基础:模板 1.2 关于模板参数 1.2.1 模板参数类型 类型参数   typename声明的参数都属于类型参数,它的实参必须为系统内置或者用户自定义的数据类型,包括类模板实体 ...

  6. 使用 ASP.NET Core MVC 创建 Web API(六)

    使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 使用 ASP.NET Core MVC 创建 Web API(二) 使 ...

  7. 数据库查询性能 LinqDB vs Sql查询

    使用LinqDB查询Sqlite数据库数据,不管是大数据还是少量的数据,感觉特别耗时,尤其是首次查询 一个含有2.7万条数据的数据表 首次查询: 查询2.7万条数据,耗时1s 查询指定的1条数据,也要 ...

  8. Fiddler抓取内容自动保存本地

    Fiddler抓取内容自动保存本地 一.点击FidderScript 二.选择你想要的获得内容的方法 OnBeforeRequest:发送请求后 OnBeforeResponse:获得响应 三.修改j ...

  9. JavaWeb学习——了解Servlet

    JavaWeb学习——了解Servlet 摘要:本文主要学习了什么是Servlet,以及如何使用Servlet进行开发. 基础知识 背景 随着互联网技术的发展,基于HTTP和HTML的web应用急速增 ...

  10. python yield关键词使用总结

    python yield关键词使用总结 by:授客 QQ:1033553122 测试环境 win10 python 3.5 yield功能简介 简单来说,yield 的作用就是把一个函数变成一个 ge ...