在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. 用SqlDataReader返回多个结果集

    using System; using System.Data; using System.Data.SqlClient; namespace Northwind { class Program { ...

  2. 搭健MyBatis开发环境

    相关文献资料地址:http://www.mybatis.org/mybatis-3/zh/getting-started.html 关于如何创建一个项目,添加Tomcat运行环境和生成`web.xml ...

  3. Nginx 禁止 ip 访问

    server { listen 80 default_server; server_name _; access_log /logs/ip-access.log main; error_log /lo ...

  4. [细节版]Let'sEncrypt 免费通配符/泛域名SSL证书添加使用教程

    参考网址:https://lnmp.org/faq/letsencrypt-wildcard-ssl.html 使用的dns服务商:阿里云 , 更多服务商地址可见参考网址. 遇见的问题一. [Sat ...

  5. pycharm修改提示

  6. pace.js 原理(转)

    pace.js监控了什么: pace.js对于加载进度监控了什么呢?通过阅读源码,我们看到整体的进度有四个部分组成:document,elements,eventLag和ajax这四种监视器(Moni ...

  7. BZOJ 2865 字符串识别(后缀数组+线段树)

    很容易想到只考虑后缀长度必须为\(max(height[rk[i]],height[rk[i]+1])+1\)(即\([i,i+x-1]\)代表的串只出现过一次)然后我正着做一遍反着做一遍,再取一个\ ...

  8. [NOIP2015普及组]推销员

    题目:洛谷P2672.codevs5126.Vijos P1977 题目大意:有个推销员要去推销,要你求他推销1~n户人家分别最多花多少“疲劳值”.具体见题目. 解题思路:如果用$O(n^2)$做的话 ...

  9. wordcontent结对编程

    合作者:201631062625 201631062127 代码地址:https://gitee.com/yzpdegit/ts 本次作业链接:https://www.cnblogs.com/yang ...

  10. 洛谷 P1403 [AHOI2005]约数研究

    怎么会有这么水的省选题 一定是个签到题. 好歹它也是个省选题,独立做出要纪念一下 很容易发现在1~n中,i的因子数是n / i 那就枚举每一个i然后加起来就OK了 #include<cstdio ...