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

时间: 2024-10-24 11:32:36

android launchmode singleinstance问题的相关文章

android launchMode理解以及应用场景

在我们写应用的时候,常常涉及多个activity组件之间的跳转.比如说某个资讯的页面中,点击下一篇资讯跳转相同的页面,只有页面的数据不一样.一般情况下我不会注意launchMode 这个属性,只会使用默认的,这样会产生大量重复的activity.那是因为之前不了解,所以特此研究学习. 1.如何指定launchMode 基本上我们可以直接指定一个launchMode属性在AndroidManifest.xml 文件中 <activity android:name=".views.MainAc

来自Android LaunchMode的温馨提示

西西说 作为一只安卓小白,还是愿意和大家分享我的探索旅程,那么就让我们先来一点来自Android launchMode的温馨提示吧~(≧▽≦)/~. 背景知识 "现在我的手中有一摞牌,但是我让你看到的只有一张." "其他牌去哪了呢?" "其他张牌都被最上面这张牌挡住了呀." 上面的这段话,很形象地解释了acitivity和任务栈的关系. 接下来我们首先了解一下任务--Task. Task Task 是activities的集合,通过back st

android:launchMode的四种方式

Activity一共有以下四种launchMode: standard singleTop singleTask singleInstance 1.standard standard模式是默认的启动模式,不用为<activity>配置android:launchMode属性即可,当然也可以指定值为standard. 我们将会一个Activity,命名为FirstActivity,来演示一下标准的启动模式.FirstActivity代码如下: package com.scott.launchmo

微信分享配置回调Activity中launchMode=&quot;singleInstance&quot;的一个坑

在做微信分享的时候,需要用到一个微信的回调Activity:WXEntryActivity 需要用到微信的jar包,可以去开放平台获取 public class WXEntryActivity extends BaseActivity implements IWXAPIEventHandler { 这个activity需要实现一个接口,接口回调函数 // 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法 @Override public void onResp(BaseResp res

android launchMode加载模式和intent flag

ApplicationTask和Process的区别与联系 Application task process 四种加载模式 standard模式 singleTop模式 singleTask模式 singleInstance模式 SingleTask和SingleInstance区别 实例 startActivityForResult如果被启动activity加载模式为SingleTask和SingleInstance 使用Intent标志 FLAG_ACTIVITY_NEW_TASK FLAG

android:launchMode概述

android:launchMode An instruction on how the activity should be launched. There are four modes that work in conjunction with activity flags (FLAG_ACTIVITY_* constants) in Intent objects to determine what should happen when the activity is called upon

Android LaunchMode案例篇

首先感谢小伙伴的关注.然后祝愿广大的情侣们节日快乐! 在开发中有时会遇到这种场景,用户点击注冊.第一步,第二步,完毕注冊跳转到登录界面,不须要用户一步一步的返回到登录界面.这是怎么实现的呢? 案例:有四个界面 A.B,C.D 从A跳转到B.B跳转到C,C跳转到D,D完毕注冊跳转到A,点击返回键退出程序.详细过程来看下图: 这里提供了三种常见的解决方式. 方案一 1.清单文件(AndroidManifest.xml)文件设置A的启动模式 <activity android:name=".A&

android launchmode 使用场景

菜鸟起飞记 android launchmode 使用场景 Activity一共有以下四种launchMode: 1.standard 2.singleTop 3.singleTask 4.singleInstance 一,引用场景分析 1.standard 是默认的系统启动模式,每次启动activity都会新建一个实例,也就是说即使启动相同的activity ,他所产生的对象也是不同的. 该种模式大多用于 页面切换的 中间页,每次都是新页面(适用于大多场景). 2.singleTop 单一栈顶

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

模式介绍 [1] standard 模式 这是默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈中. [2] singleTop 模式 如果在任务的栈顶正好存在该Activity的实例,就重用该实例( 会调用实例的 onNewIntent() ),否则就会创建新的实例并放入栈顶,即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例. [3] singleTask 模式 如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的 onNew