在android里,有4种activity的启动模式。分别为:“standard” (默认) “singleTop” “singleTask” “singleInstance”

standard、singleTop、singleTask、singleInstance(当中前两个是一组、后两个是一组),默觉得standard
 standard:就是intent将发送给新的实例,所以每次跳转都会生成新的activity。

singleTop:也是发送新的实例,但不同standard的一点是。在请求的Activity正好位于栈顶时(配置成singleTop的Activity),不会构造新的实例
singleTask:和后面的singleInstance都仅仅创建一个实例。当intent到来,须要创建设置为singleTask的Activity的时候,系统会检查栈里面是否已经有该Activity的实例。假设有直接将intent发送给它。
singleInstance:首先说明一下task这个概念,Task能够觉得是一个栈,可放入多个Activity。

比方启动一个应用,那么Android就创建了一个Task。然后启动这个应用的入口Activity。那在它的界面上调用其它的Activity也仅仅是在这个task里面。

那假设在多个task中共享一个Activity的话怎么办呢。举个例来说,假设开启一个导游服务类的应用程序,里面有个Activity是开启GOOGLE地图的,当按下home键退回到主菜单又启动GOOGLE地图的应用时。显示的就是刚才的地图,实际上是同一个Activity。实际上这就引入了singleInstance。singleInstance模式就是将该Activity单独放入一个栈中,这样这个栈中仅仅有这一个Activity。不同应用的intent都由这个Activity接收和展示,这样就做到了共享。

当然前提是这些应用都没有被销毁,所以刚才是按下的HOME键,假设按下了返回键,则无效


它们主要有例如以下不同:

1. 怎样决定所属task

“standard”和”singleTop”的activity的目标task。和收到的Intent的发送者在同一个task内,除非intent包含參数FLAG_ACTIVITY_NEW_TASK。

假设提供了FLAG_ACTIVITY_NEW_TASK參数。会启动到别的task里。

“singleTask”和”singleInstance”总是把activity作为一个task的根元素。他们不会被启动到一个其它task里。

2. 是否同意多个实例

“standard”和”singleTop”能够被实例化多次,而且存在于不同的task中,且一个task能够包含一个activity的多个实例;

“singleTask”和”singleInstance”则限制仅仅生成一个实例,而且是task的根元素。

singleTop要求假设创建intent的时候栈顶已经有要创建 的Activity的实例,则将intent发送给该实例,而不发送给新的实例。

3. 是否同意其他activity存在于本task内

“singleInstance”独占一个task,其他activity不能存在那个task里;假设它启动了一个新的activity,无论新的activity的launch mode 怎样,新的activity都将会到别的task里执行(如同加了FLAG_ACTIVITY_NEW_TASK參数)。

而另外三种模式,则能够和其他activity共存。

4. 是否每次都生成新实例

“standard”对于没一个启动Intent都会生成一个activity的新实例。

“singleTop”的activity假设在task的栈顶的话,则不生成新的该activity的实例。直接使用栈顶的实例,否则,生成该activity的实例。

比方如今task栈元素为A-B-C-D(D在栈顶),这时候给D发一个启动intent。假设D是 “standard”的,则生成D的一个新实例,栈变为A-B-C-D-D。

假设D是singleTop的话,则不会生产D的新实例,栈状态仍为A-B-C-D

假设这时候给B发Intent的话,无论B的launchmode是”standard” 还是 “singleTop” ,都会生成B的新实例。栈状态变为A-B-C-D-B。

“singleInstance”是其所在栈的唯一activity,它会每次都被重用。

“singleTask”假设在栈顶。则接受intent,否则,该intent会被丢弃。可是该task仍会回到前台。

当已经存在的activity实例处理新的intent时候,会调用onNewIntent()方法

假设收到intent生成一个activity实例,那么用户能够通过back键回到上一个状态。假设是已经存在的一个activity来处理这个intent的话,用户不能通过按back键返回到这之前的状态。


思考一下activity的启动模式的更多相关文章

  1. 关于activity的启动模式

    在Android中每个界面都是一个Activity ,界面的切换实际上是对不同Activity实例化的过程.而启动模式就决定Activity启动运行方式. 1.设置方式它是在主配置文件中,Activi ...

  2. 无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)

    1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCrea ...

  3. android Activity的启动模式与flag的见解

    最近做一个安卓项目,想要实现的效果就是:当打开一个按钮的时候,启动了一个A功能,当用户返回到桌面再继续进去的时候,不过之前在哪个Activity,都会先跳转到A功能的那个界面,当用户点击返回的时候,再 ...

  4. android Activity的启动模式

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

  5. Activity的启动模式(android:launchMode)

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

  6. 4种activity的启动模式

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

  7. Activity的启动模式及回退栈的概念

    Activity的启动模式 standard 正常模式 在创建一个新的activity的时候,直接在栈顶创建一个新的activity singleTop 顶部单个 在创建一个新的activity的时候 ...

  8. Activity 的启动模式

    好久没用过那几种activity的启动模式了,如今看到singletop竟然傻了眼,完全忘记了这几种启动模式的区别!隧将两年前的总结翻出来,通读一遍那晦涩难懂的记录,又理解了一遍,在以前记录的基础上, ...

  9. Activity LauchMode启动模式(转载)

    转载于:http://www.cnblogs.com/plokmju/p/android_ActivityLauncherMode.html 在一个Android应用中,不可避免的会包含多个Activ ...

随机推荐

  1. CF1065D Three Pieces (多元最短路)

    题目大意:给你一个棋盘,你需要控制棋子依次经过编号为1~n的所有点,棋子的可以是车,马,象,都依照国际象棋的行棋方式,每走一步消耗1单位时间,但每次更换棋子都需要额外1单位时间,求经过所有点需要的最少 ...

  2. CF1029E Tree with Small Distances (贪心)

    题目大意:给你一棵边权为1的树,让你加入一些边,使得根节点(1号节点)到其他节点的最短距离不大于2 并没有想到贪心...... 正解的贪心思路是这样的 用一个堆维护当前距离最远的点,然后把根节点和它的 ...

  3. MATLAB曲线拟合

    转自原文 MATLAB曲线拟合 曲线拟合 实例:温度曲线问题 气象部门观测到一天某些时刻的温度变化数据为: t 0 1 2 3 4 5 6 7 8 9 10 T 13 15 17 14 16 19 2 ...

  4. 50个经典Sql语句

    50个经典Sql语句 --1.学生表 Student(S,Sname,Sage,Ssex) --S 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表  Cours ...

  5. JVM分代通俗解释

    JVM分代通俗解释 学习了:https://www.cnblogs.com/zgghb/p/6428395.html

  6. Android基础笔记(十三)- 内容提供者原理和简单使用

    为什么要有内容提供者 内容提供者的工作原理 使用内容解析者对内容提供者进行增删改查操作 利用内容提供者和内容解析者备份手机短信 利用内容提供者插入短信 为什么要有内容提供者 内容提供者技术的目的是: ...

  7. Oracle创建用户以及备份还原数据库操作

    -- Create the user create user XX identified by "" default tablespace USERS temporary tabl ...

  8. 【Struts2二】结果集(result-type)

    在jsp/servlet中,结果集一般是指请求转发和重定向这两种. Struts2作为框架,提供了基于这两种的很多其它的结果集! 在struts-default.xml中定义了一些默认的结果集:   ...

  9. MongoDB Shell (mongo)

    https://docs.mongodb.com/getting-started/shell/client/ The mongo shell is an interactive JavaScript ...

  10. Android Shape使用

    说明 在Android开发中,使用shape可以很方便的帮我们画出想要的背景,相对于png图片来说,使用shape可以减少安装包的大小,而且能够更好的适配不同的手机. 使用 先贴出官网上的说明: &l ...