问题描述

最近测试关于launchmode的四种方式

默认模式 top singletask 都已经了解了

唯独这个instance模式

我的问题是

我们只作2个activity的假设A和B,其中A为instance的 B为标准模式

启动过程为A -> B -> A ->B

这个过程为什么B也只是一个实例了, B是标准模式,应该每次重新创建新的实例啊?

谁帮我解答一下这个问题,最好再做几个例子的测试,复杂一点的,能让我充分理解instance模式的

---------------------------

答:

1.对你问题描述的重复:

应用程序中有两个activity,activityA和activtiyB,activityA的启动模式为"SingleInstance",activityB的启动模式为"Standard",启动顺序为activityA->activityB->activityA->activityB,问为什么应用程序中activityB只有一个实例?

回答:activityB为"Standard"启动模式,按照题目中描述的启动顺序,activityB的新实例会有两个,

(1)activityB的新实例会和发送Intent启动它的组件在同一个task内

(2)activityB的新实例会在这个task内运行

(3)activityA为"SingleInstance"启动模式,它只会产生一个实例,并且这个实例在task中是根元素,这个task中不会再有新的元素,而两个新的activityB实例和这个activityA的实例不会在同一个task中

(4)activityB的这两个新实例会在同一个task中,除非启动activityB的Intent中包括参数FLAG_ACTIVITY_NEW_TASK,那么这两个activityB的新实例会各自在一个新的task中运行。

2.你在问题中提到,"最好再做几个例子的测试,复杂一点,能让我充分理解instance模式的",我想先在理论分析上讲清楚几个例子,之后如果有时间,再设计几个例子demo帮助你理解:

android平台中activity有如下四种启动模式,

"Standard"(默认)

"SingleTop"

"SingleTask"

"SingleInstance"

(1)"Standard"模式:该模式的Activity可以创建多个实例,且每个task都可以有多个实例,一个实例运行在哪个task内取决于给它发送Intent的组件运行在那个task内;

(2)"SingleTop"模式:该模式的Activity如果在task栈顶的话,则不生成新的该Activity的实例,直接使用栈顶的实例,否则,生成该Activity的实例;

比如现在task栈元素为A-B-C-D(D在栈顶),这时候给D发一个启动Intent,如果D是"SingleTop"模式的话,则不会生产D的新实例,栈状态仍为A-B-C-D;如果这时候发送者给B发送Intent,不管B的launch mode是"Standard" 还是 "SingleTop" ,都会生成B的新实例,栈状态变为A-B-C-D-B;

(3)"SingleTask"模式:只有一个task中会有,如果已经有其他的task并且包含该实例,那就直接调用那个task的实例;如果没有任何task中有该Activity的实例,则新建一个task,将该实例装入,作为task的根元素,但是该实例不会独占该task;

(4)"SingleInstance"模式:该Activity实例会独占task,其它Activity不能存在那个task里,如果它启动了一个新的Activity,不管新的Activity实例的launch mode 如何,新的Activity都将会到别的task里运行。

3.最后附上一个链接,方便你更好地理解

http://blog.csdn.net/feng88724/article/details/6412638

android launchmode singleinstance问题的更多相关文章

  1. Android 由 android:launchMode="singleInstance“引发的界面无法返回的情况

    问题描述:现有A.B.C三个Activity.现在A跳转到B再由B跳转到C,然后依次返回.正常情况是C先返回B然后再返回的A.但现在的情况是C直接跳过B直接返回到A了. 解决办法:认真排查了A.B.C ...

  2. android:launchMode的四种方式

    Activity一共有以下四种launchMode: standard singleTop singleTask singleInstance 1.standard standard模式是默认的启动模 ...

  3. android launchmode(四种启动模式)应用场景及实例

    模式介绍 [1] standard 模式 这是默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈中. [2] singleTop 模式 如果在任务的栈顶正好存在该Activ ...

  4. android:launchMode概述

    android:launchMode An instruction on how the activity should be launched. There are four modes that ...

  5. Android LaunchMode案例篇

    首先感谢小伙伴的关注.然后祝愿广大的情侣们节日快乐! 在开发中有时会遇到这种场景,用户点击注冊.第一步,第二步,完毕注冊跳转到登录界面,不须要用户一步一步的返回到登录界面.这是怎么实现的呢? 案例:有 ...

  6. android:launchMode="singleTask" 与 onNewIntent(Intent intent) 的用法

    最近项目开发中用到了android:launchMode="singleTask" 和 onNewIntent(Intent intent)两个特性,现总结一下经验: androi ...

  7. Android之android:launchMode

    (本文转自:http://www.eoeandroid.com/blog-531377-3446.html) (详细查看:http://blog.csdn.net/liuhe688/article/d ...

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

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

  9. 喜闻乐见-Android LaunchMode

    launchMode,通俗点说,就是定义了Activity应该如何被launch的.那么这几种模式的区别以及应用场景,会有何不同呢?谷歌是基于什么原因设计这几种模式的呢?这几种模式背后的工作原理是什么 ...

随机推荐

  1. Android学习笔记(一)之仿正点闹钟时间齿轮滑动的效果

    看到正点闹钟上的设置时间的滑动效果非常好看,自己就想做一个那样的,在网上就开始搜资料了,看到网上有的齿轮效果的代码非常多,也非常难懂,我就决定自己研究一下,现在我就把我的研究成果分享给大家.我研究的这 ...

  2. 测试基础面试题 + SQL 面试题(选择题有部分答案,难度:低)

    测试基础面试题 + SQL 面试题(选择题有部分答案,难度:低) 答案: .A .C .C .A .A .D

  3. shell监控脚本

    序言: 前几天一好友问我服务器监控怎么做?你们公司的监控是怎么做的?有什么开源的监控软件推荐?常见的开源的监控软件当然首先推荐ZABBIX,分布式够强大,而且很多公司都在用,我问他具体什么需求,能监控 ...

  4. 孤荷凌寒自学python第二十二天python类的继承

    孤荷凌寒自学python第二十二天python类的继承 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) python中定义的类可以继承自其它类,所谓继承的概念,我的理解 是,就是一个类B继承自 ...

  5. 【志银】Win764位配置Github环境及将代码部署到Github pages-志银强势总结

    (软件及教程下载分享:链接:http://pan.baidu.com/s/1dFysay9 密码:pug0) 1-安装Git-2.9.2-64-bit.exe(解压安装文件,运行安装程序,除了记得修改 ...

  6. 1020 Tree Traversals (25 分)(二叉树的遍历)

    给出一个棵二叉树的后序遍历和中序遍历,求二叉树的层序遍历 #include<bits/stdc++.h> using namespace std; ; int in[N]; int pos ...

  7. win7下的nginx小demo

    一直大概知道nginx怎么玩,但是不看文档又蒙蔽.在这记录一下,以后好查看 下载tomcat,改index.jsp http://tomcat.apache.org/download-80.cgi t ...

  8. event.returnValue=false与event.preventDefault()

    event.preventDefault()方法是用于取消事件的默认行为,但此方法并不被ie支持,在ie下需要用window.event.returnValue = false; 来实现. funct ...

  9. hadoop2.5.2学习及实践笔记(四)—— namenode启动过程源码概览

    对namenode启动时的相关操作及相关类有一个大体了解,后续深入研究时,再对本文进行补充 >实现类 HDFS启动脚本为$HADOOP_HOME/sbin/start-dfs.sh,查看star ...

  10. 【Nescafé 31】杯NOIP模拟赛

    t1 题意:n*m的棋盘上从(1,1)走到(n,m),只能向下或向右,一些格子有老鼠,每个老鼠互不相同,当处于与老鼠有重边的格子时,视为看见了这只老鼠,求到终点看到最少的不同老鼠数. 分析:DP 由于 ...