android launchmode singleinstance问题
问题描述
最近测试关于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问题的更多相关文章
- Android 由 android:launchMode="singleInstance“引发的界面无法返回的情况
问题描述:现有A.B.C三个Activity.现在A跳转到B再由B跳转到C,然后依次返回.正常情况是C先返回B然后再返回的A.但现在的情况是C直接跳过B直接返回到A了. 解决办法:认真排查了A.B.C ...
- android:launchMode的四种方式
Activity一共有以下四种launchMode: standard singleTop singleTask singleInstance 1.standard standard模式是默认的启动模 ...
- android launchmode(四种启动模式)应用场景及实例
模式介绍 [1] standard 模式 这是默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈中. [2] singleTop 模式 如果在任务的栈顶正好存在该Activ ...
- android:launchMode概述
android:launchMode An instruction on how the activity should be launched. There are four modes that ...
- Android LaunchMode案例篇
首先感谢小伙伴的关注.然后祝愿广大的情侣们节日快乐! 在开发中有时会遇到这种场景,用户点击注冊.第一步,第二步,完毕注冊跳转到登录界面,不须要用户一步一步的返回到登录界面.这是怎么实现的呢? 案例:有 ...
- android:launchMode="singleTask" 与 onNewIntent(Intent intent) 的用法
最近项目开发中用到了android:launchMode="singleTask" 和 onNewIntent(Intent intent)两个特性,现总结一下经验: androi ...
- Android之android:launchMode
(本文转自:http://www.eoeandroid.com/blog-531377-3446.html) (详细查看:http://blog.csdn.net/liuhe688/article/d ...
- Activity的启动模式(android:launchMode)
在android里,有4种activity的启动模式,分别为: “standard” (默认) “singleTop” “singleTask” “singleInstance” 它们主要有如下不同: ...
- 喜闻乐见-Android LaunchMode
launchMode,通俗点说,就是定义了Activity应该如何被launch的.那么这几种模式的区别以及应用场景,会有何不同呢?谷歌是基于什么原因设计这几种模式的呢?这几种模式背后的工作原理是什么 ...
随机推荐
- django之python3.4及以上连接mysql的一些问题记录
首先,祭出大杀器whl https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient django1.x与django2.x 在项目的写法上有一些区别 ...
- laravel5.5中间件
目录 1. 中间件知识 1. artisan 命令 2. 文件内容 3. 前置中间件和后置中间件 4. 使用中间件 2. 控制器中间件 1. 中间件知识 1. artisan 命令 php artis ...
- 2016年后web开发趋势是什么?
2016 年后 Web开发趋势是什么 来源:yafeilee.me 发布时间:2016-05-06 阅读次数:1378 3 近二年的进展 前端发展日新月异, 甚至有一句戏言: "每六星期 ...
- grunt简记
grunt和gulp都是前端自动化的工具,grunt更成熟,插件社区全.大:gulp比较年轻,性能更好,更简单容易.具体使用哪种可根据实际项目组来决定. 创建任务 grunt默认执行的是default ...
- BInder浅析
Binder是什么 Binder是运行在Android内核态用于进程间通信(IPC)的驱动,采用C/S架构,由三项基本组件组成:Binder服务端,Binder驱动,应用程序客户端. 为什么要用Bin ...
- apt-get阿里源
备份原有配置文件 mv /etc/apt/sources.list /etc/apt/sources.list.bak 新建一个文件 vi /etc/apt/sources.list 复制以下内容到新 ...
- Canvas 图片平铺设置
/** * 图片平铺 */ function initDemo7(){ var canvas = document.getElementById("demo7"); if (!ca ...
- 【志银】Dev-Cpp配置OpenGL图形库(成功版本:Dev-Cpp 5.7.1 MinGW 4.8.1)
★配置前须知:Dev-Cpp自带OpenGL的使用和OpenGL简介 (附Dev-Cpp下载地址:http://sourceforge.net/projects/orwelldevcpp/?sourc ...
- php连接数据库增删改查----多条件查询
关于查询,可以直接写在主页面上 来进行查询 首先,先建立一个表单 <form method="post" action="crud.php"> &l ...
- poj1936 假期计划第一水
All in All Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 29651 Accepted: 12312 Desc ...