Activity的启动模式详解

Activity有四种载入模式:standard(默认), singleTop, singleTask和 singleInstance。



(1).standard(默认):Activity的默认载入方法。

即使某个要启动的Activity在Task栈中已经存在,相同会新创建一个实例压入栈中。也就是说:该模式的Activity。仅仅要是启动,都会创建一个新的实例压入栈中。

比如:

如今栈的情况为:A B C D。在D这个Activity中通过Intent跳转到D本身,那么如今的栈情况为: A B C D D 。

此时假设栈顶的D通过Intent跳转到B,则栈情况为:A B C D D B。此时假设依次按返回键。D D C B A将会依次弹出栈而显示在界面上。例如以下图所看到的:



(2).singleTop模式:假设某个Activity的Launch mode设置成singleTop,那么当该Activity位于栈顶的时:再通过Intent跳转到本身这个Activity,则将不会创建一个新的实例压入栈中。

假设该Activity不位于栈顶的时候。通过Intent跳转到本身这个Activity,则会创建一个新的实例压入栈中。

比如:

如今栈的情况为:A B C D。D的Launch mode设置成了singleTop,那么在D中启动Intent跳转到D。此时栈的情况依旧为:A B C D。

可是假设此时B的模式也是singleTop,D跳转到B,由于此时B不是位于栈顶,此时栈的情况就变成了:A B C D B。例如以下图:



(3).singleTask模式:假设某个Activity是singleTask模式,那么Task栈中将会仅仅有一个该Activity的实例。该Activity之上的全部的Activity实例都将会被销毁。

比如:如今栈的情况为:A B C D。B的Launch mode为singleTask。此时D通过Intent跳转到B。则栈的情况变成了:A B。而C和D被弹出销毁了,也就是说位于B之上的实例都被销毁了。

例如以下图:



(4).singleInstance模式:将Activity压入一个新建的任务栈中。也就是说:将要被启动的新的Activity将会被压入一个新建的任务栈中。

比如:Task栈1的情况为:A B C。C通过Intent跳转到D,而D的Launch mode为singleInstance。则将会新建一个Task栈2。此时Task栈1的情况还是为:A B C。

Task栈2的情况为:D。此时屏幕界面显示D的内容,假设这时D又通过Intent跳转到D。则Task栈2中也不会新建一个D的实例,所以两个栈的情况也不会变化。

而假设D跳转到C,则栈1的情况变成了:A B C C,由于C的Launch mode为standard。此时假设再按返回键,则栈1变成:A B C。也就是说如今界面还显示C的内容,不是D。

例如以下图:



注:

singleTask模式和singleInstance模式差别:

singleTask模式的activity同意其他activity成为task中的一部分 。而且它通常在task栈的根部。其他activity(必须是standard模式和singleTop模式的activity)能够载入到这个栈上。还有一方面,singleInstance模式的activity不同意不论什么其他activity载入到这个task栈上。它是这个task中唯一的activity。假设它启动还有一个activity,那个activity会被指引到不同的task中,这个行为就像在intent中用FLAG_ACTIVITY_NEW_TASK标记一样。

(通常来说。manifest中用singleTask启动模式和在intent中用FLAG_ACTIVITY_NEW_TASK标记的行为是一样的)。

总的来说:singleTask模式能够同意和别的Activity在一个栈中。在它之上的Activity都将会被销毁。而singleInstance模式的Activity是单独在一个Task中。

Activity的启动模式详解的更多相关文章

  1. Android Activity的4种启动模式详解(示例)

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5233269.html 先介绍下Android对Activity的管理,Android采用Task来管理多个A ...

  2. Activity的四种启动模式详解

    Activity的启动模式在清单文件AndroidManifest.xml中的Activity属性中进行设置: 如:<activity android:name=".MainActiv ...

  3. Android中Activity启动模式详解

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

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

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

  5. Activity的启动模式全解standard,singleTop,singleTask,singleInstance

    在android中控制Activity的启动模式的属性主要控制两大功能: 1,控制activity 进入哪一个任务task 中,   有两种可能,进入启动task中,进入指定taskAffinity的 ...

  6. Android Activity 启动模式详解

    最近有群里的朋友问我 Activity的四种启动模式分别是什么意思? 当初因为项目比较忙,草草的解释了下, Api文档中说的也只是一般,在这里就小记一下吧,以便有更多的朋友对Activity启动模式了 ...

  7. UEFI与 Legacy BIOS两种启动模式详解

    (1). UEFI启动模式 与 legacy启动模式 legacy启动模式: 就是这么多年来PC一直在使用的启动方式(从MBR中加载启动程序),UEFI BIOS作为一种新的BIOS自然也应该兼容这种 ...

  8. android Activity的启动模式

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

  9. Activity的四种加载模式详解:

    先来看看总结图: 模式详解: standard模式: 标准启动模式,也是activity的默认启动模式.在这种模式下启动的activity可以被多次实例化,即在同一个任务中可以存在多个activity ...

随机推荐

  1. mysql Keepalived 实践

    Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived可以用来防止服务器单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生,通过配合Nginx可 ...

  2. 设置linux的console为串口【转】

    转自:http://blog.chinaunix.net/uid-27717694-id-4074219.html 以Grub2为例:1. 修改文件/etc/default/grub   #显示启动菜 ...

  3. Springboot 之 自定义配置文件及读取配置文件

    本文章来自[知识林] 读取核心配置文件 核心配置文件是指在resources根目录下的application.properties或application.yml配置文件,读取这两个配置文件的方法有两 ...

  4. Ibatis.Net 表连接查询学习(五)

    IBatis.Net之多表查询 一.定制实际对应类的方式 首先配置多表的测试数据库,在之前Person表中增加一列"CountryId",新建一张Country表,两张表关系如下: ...

  5. intelliJ 打包jar的多种方式

    这里总结出用IntelliJ IDEA打包jar包的多种方式,以后的项目打包Jar包可以参考如下形式: 用IDEA自带的打包形式 用Maven插件maven-shade-plugin打包 用Maven ...

  6. .NetCore Cap 结合 RabbitMQ 实现消息订阅

    开源分布式消息框架 Cap 可以在GitHub上拉也可以通过nuget添加 上一篇博文写了 Windows RabbitMQ的安装使用 Cap支持事务,通过捕获数据库上下文连接对象实现 消息事务,消息 ...

  7. [转] javascript组件开发方式

    作为一名前端工程师,写组件的能力至关重要.虽然JavaScript经常被人嘲笑是个小玩具,但是在一代代大牛的前仆后继的努力下,渐渐的也摸索了一套组件的编写方式. 下面我们来谈谈,在现有的知识体系下,如 ...

  8. Vue2服务端渲染

    Vue2 服务端渲染 花费了一个月时间,终于在新养车之家项目中成功部署了vue2服务端渲染(SSR),并且使用上了Vuex 负责状态管理,首屏加载时间从之前4G网络下的1000ms,提升到了现在500 ...

  9. Hive的安装和使用

    1.Hive1.1 在hadoop生态圈中属于数据仓库的角色.他能够管理hadoop中的数据,同时可以查询hadoop中的数据. 本质上讲,hive是一个SQL解析引擎.Hive可以把SQL查询转换为 ...

  10. HDU 6249 Alice’s Stamps

    [题目链接] 题目大意: 说有$m$个区间,要求选出不超过$k$个区间,使这些区间覆盖的长度最长,问最长长度是多少. 题解: 所有区间按$R$从小到大排序之后可以进行$dp$. $dp[i][j]$表 ...