问题描述
最近测试关于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