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的.那么这几种模式的区别以及应用场景,会有何不同呢?谷歌是基于什么原因设计这几种模式的呢?这几种模式背后的工作原理是什么 ...
随机推荐
- 《Cracking the Coding Interview》——第6章:智力题——题目2
2014-03-19 06:57 题目:对于8x8的棋盘,如果拿掉对角位置的两个小块儿,能否用1x2的多米诺牌拼成剩下的棋盘? 解法:不可能.且不说8x8,NxN都是不可能的.如果N是奇数,NxN-2 ...
- Java基础-6流程控制
一).选择控制: 选择控制分为两种:if...else...和switch 单分支结构:这是最简单的一种选择结构,它只是简单的判断某个条件是否成立,如果成立就执行一段代码,语句形式为: if(条件表达 ...
- Visual C++ 图像处理类库CxImage源代码
说明:VC++ 图像处理类库CxImage源代码,CxImage是一个可以用于MFC 的C++类,可以打开,保存,显示,转换各种格式的图像文件,比如BMP, JPEG, GIF, PNG, TIFF, ...
- shell之小知识点
last:显示/var/log/wtmp文件,显示用户登录历史及重启历史 -n #:仅显示最近几次的相关信息 lastb:/var/log/btmp文件,显示用户错误的登录尝试 -n ...
- [洛谷P3321][SDOI2015]序列统计
题目大意:给你一个集合$n,m,x,S(S_i\in(0,m],m\leqslant 8000,m\in \rm{prime},n\leqslant10^9)$,求一个长度为$n$的序列$Q$,满足$ ...
- 银河战舰 [启发式合并+dp]
题面 思路 我们首先考虑传统的链上LIS做法:保存每个长度的LIS末端的最小值,二分查找 那么这道题其实就只是搬到树上来做了而已 我们考虑一个节点,假设它的儿子已经处理完毕了 那么我们选择LIS最长的 ...
- 牛客 2018NOIP 模你赛2 T2 分糖果 解题报告
分糖果 链接:https://www.nowcoder.com/acm/contest/173/B 来源:牛客网 题目描述 \(N\) 个小朋友围成一圈,你有无穷个糖果,想把其中一些分给他们. 从某个 ...
- 区间(interval)
区间(interval) 题目描述 zht有一个长度为n的排列P,现在zht想知道,有多少个由连续整数组成的区间[l,r][l,r]可以由PP中的两个区间[a,b],[c,d]拼出,其中1≤a≤b&l ...
- oracle怎么查看一个表或一个索引占用多少空间
很多时候我们想知道一个表或一个索引占用多少M的空间,以下脚本就是满足这个要求的,记住替换其中的内容. SELECT owner, segment_name, SUM(bytes)/1024/1024 ...
- Java代码实现真分页
在JavaWeb项目中,分页是一个非常常见且重要的一个小方面.本次作为记载和学习,记录项目中出现的分页并做好学习记录.在这里,用的是SSH框架.框架可以理解如下图: 在JSP页面,描写的代码如下: & ...