您的位置:首页 > 其它

从启动模式为singleInstance的Activity启动到默认情况的Activity

2014-03-24 13:53 281 查看
Activity的启动模式

standard(默认)


1)每次使用startActivity方法启动Activity时

都会创建该Activity的新实例

2)Activity的多个实例可以位于同一个task中

也可以分布在不同的task里

3)在当前task中使用startActivity方法启动Activity

也在当前task中创建和运行

singleTop

1)当设置为singleTop模式Activity,未处于栈顶时

其运行特点与标准模式下一致

2)当其位于栈顶时,如果使用startActivity方法

再次启动该Activity,则不会创建该Activity的新实例

而是直接使用栈顶的实例响应启动操作.并且调用该实例

的onNewIntent方法,将本次启动的intent传入到实例中



singleTask


1)设置singleTask的Activity,具有全局唯一性

即同一时刻在Android系统中只能存在该Activity

的一个实例

2)当使用startActivity方法启动设置为singleTask的Activity时

如果该Activity的实例尚不存在,则创建该实例

否则,不会重复创建实例,而是将已经存在的实例重新带回到栈顶

如果在该实例上存在其他实例,则销毁这些实例后,将该实例重新

带回栈顶(销毁其他实例的过程是后进的先销毁)

3)在创建该Activity的实例时,

如果当前任务的taskAffinity值与该Activity的taskAffinity值相同,

则在当前任务中创建实例,

否则,在一个新的任务中创建实例



singleInstance


1)设置singleInstance的Activity,具有全局唯一性

即同一时刻在Android系统中只能存在该Activity

的一个实例

2)当使用startActivity方法启动该Activity的实例时

如果该Activity的实例尚不存在,则直接在新的任务

中创建该实例。

如果该实例已经存在,则直接显示该实例

3)该Activity的实例,不与其他activity的实例共存于一个

任务中,所以通过该实例启动的其他Activity的实例,只能

被创建在其他的task里,如果已经存在与新创建的activity实例

taskAffinity值相同的task,则直接在该task中创建实例,否则

就在一个新的任务中创建实例

补充:

TaskAffinity

1)任何一个task都一定有一个taskAffinity值

该值与该任务栈 栈底的Acitivity的

taskAffinity值相同

2)任何的Activity都一定有一个taskAffinity值

如果该值未明确设定,则等同于该Activity所在

的application的taskAffinity值

3)application一定有一个taskAffinity值,如果

未明确设定,则该值等于application所在的包

的包名

下面来说明遇到的实际情况:

如一个启动模式为singleInstance的A_Activity,在启动其他Activity时,因为A_Activity不与其他activity的实例共存于一个任务中,所以通过该实例启动的其他Activity的实例,只能被创建在其他的task里。这时候就需要注意一个问题:如果在另外的一个任务中有多个Activity,并且有未finish的B_Activity,我们想通过A_Activity启动C_Activity,此时C_Activity又在B_Activity的任务栈下面,这样即使startActivity的为C_Activity,其实起来的是B_Activity。也就是说一个启动模式为singleInstance的Activity,当它启动其他Activity时,实际上到达的是另一个任务栈的栈顶,即把没有被finish的栈顶Activity启动了,和实际启动的Activity没有太大关系。

那么如何达到我们的目的,使其启动我们指定的Activity,即使在指定Activity的任务栈上面有未finish的Activity呢?

方式只需要在startActivity之前加一句:

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

这样在启动另一个Activity之前,将任务栈clear一下,就可以达到目的了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐