【Android】Activity的启动模式(android:launchMode)

来源:互联网 发布:正规的淘宝兼职网站 编辑:程序博客网 时间:2024/04/29 05:45

Android有4种启动模式,分别为 standard默认,singleTop,singleTask,singleInstance。


standard和singleTop可以被实例化多次,并且存在于不同的task中,且一个task可以包括一个activity的多个实例;

singleTask和singleInstance则限制只能生成一个实例。singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例。


singleInstance独占一个task,其他activity不能存在那个task里;如果它启动了一个新的activity,不管新的activity的launchmode如何,新的activity都将会到别的task里运行,而另外三种模式,则可以和其他activity共存。


standard对于每一个启动intent都会生成一个activity的新实例;

singleTop的activity如果在task栈顶的话,则不生成新的该activity的实例,直接使用栈顶的实例,否则,生成实例

singleInstance是所在栈的唯一activity,每次都会被重用

singleTask如果在栈顶,则接受intent,否则,该intent会被丢弃,但该task仍会回到前台


standard每次都会新建,每个task都可以有,且没个task都可以有多个实例

singleTop当前实例如果在栈顶,就不新建,如果不在栈顶,则新建,每个task都可以有

singleTask 新建一个task,如果已经有其他的task并且包含该实例,则直接调用那个task的实例,只有一个task中会有

singleInstance 新建一个task,且在该task中只有它唯一的的一个实例,只有一个task会有,且该task中只有它


问题:假如在xml中强制设置几个activity的launchmode分别为standard,singleTop,singleTask,singleInstance且taskAffinity相同,那么他们启动后分别属于哪个task

 答:taskAffinity仅仅是指acitvity期望进入的task,而不是activity真实进入的task