在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. DNS BIND之dnssec安全介绍

    Domain Name System Security Extensions (DNSSEC)DNS安全扩展,是由IETF提供的一系列DNS安全认证的机制(可参考RFC2535).它提供了一种来源鉴定 ...

  2. VB学习生成JavaBean

    Application.ActiveWorkbook.Path 获取当前excel文件所在的文件地址 Excel VBA中表示当前工作簿,有Activeworkbook和Thisworkbook 两种 ...

  3. java 导出百万数据到excel

    @RequestMapping("export") public void write(HttpServletRequest request,HttpServletResponse ...

  4. php7 memcache和memcached.so扩展

    php7安装memcache和memcached扩展 https://github.com/websupport-sk/pecl-memcache https://github.com/php-mem ...

  5. MySQL 数据还原

    1.1还原使用mysqldump命令备份的数据库的语法如下: mysql -u root -p [dbname] < backup.sq 示例: mysql -u root -p < C: ...

  6. django orm 基本

    1 modle基本数据类型 class Test(models.Model): """测试学习用""" Auto = models.Auto ...

  7. SpringBoot实战(四)获取接口请求中的参数(@PathVariable,@RequestParam,@RequestBody)

    上一篇SpringBoot实战(二)Restful风格API接口中写了一个控制器,获取了前端请求的参数,现在我们就参数的获取与校验做一个介绍: 一:获取参数 SpringBoot提供的获取参数注解包括 ...

  8. JAVA SSL

    http://docs.oracle.com/javase/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#InstallationAndCustom ...

  9. 使用React Hook后的一些体会

    一.前言 距离React Hook发布已经有一段时间了,笔者在之前也一直在等待机会来尝试一下Hook,这个尝试不是像文档中介绍的可以先在已有项目中的小组件和新组件上尝试,而是尝试用Hook的方式构建整 ...

  10. bzoj3438: 小M的作物(那年花开最小割)

    3438: 小M的作物 题目:传送门 题解: 最小割标准水题(做了几天的最小割之后表示是真的水) 为什么水:博主已经做过两道基本一样的题目了... 详情参考:bzoj3894 代码: #include ...