Activity的launchMode

在manifest.xml文件中,我们可以为Activity指定launchMode,总共有四种,弄清楚这四种的区别在Android开发中还是非常有必要的,下面分别来讨论:


     1. standard,这种是默认的模式,Activity可以创建很多的实例,不管这些实例是不是在同一个任务中。 91pron free videos可以简单理解只要调用startActivity就会创建一个新的实例。
    
     2.singleTop,基本同standard相同,唯一的区别就是如果当前有这个Activity的实例在当前任务栈的最上面,就不会再创建新的实例了,而是会调用其onNewIntent方法。例如当然任务栈中几个Activity: A-B-C-D, D是最上面的也就是当前显示的Activity,现在有个Intent要启动D,如果D是standard模式,启动后的任务栈就是A-B-C-D-D,如果是singleTop模式,启动后的任务栈就是A-B-C-D,并且D的onNewIntent方法会被调用。


     3.singleTask, 只会有一个实例,如果还没有实例,就会创建一个新的任务栈,并且创建一个实例放到这个栈中;如果已经有实例了只会调用其onNewIntent方法。


     4.singleInstance, 基本同singleTask一样,区别就是任务栈中只会并且仅能有这样一个实例。如果在这个实例中启动其他的Activity,都会创建一个新的任务。


    另外在StartActivity的时候,还可以在Intent中指定Flag, 这些Flag有:


     1.FLAG_ACTIVITY_NEW_TASK, 同singleTask.
     2.FLAG_ACTIVITY_SINGLE_TOP, 同singleTop.
     3.FLAG_ACTIVITY_CLEAR_TOP, 如果Activity已经启动并且在任务栈中了,就会将其上面的所有Activity销毁,将这个Activity置于最上面,也会调用onNewInent方法.


     如果launchMode和Flag冲突怎么办?Flag有优先权。


     参考文献:http://developer.android.com/guide/components/tasks-and-back-stack.html


    如果有ABCD四个Activity,AB是singleInstance,CD是standard,按照A-C-B-D的顺序启动,然后依次按back键,后退的顺序是什么呢?答案是D-C-B-A。为什么会这样呢?我们再来看一下singleInstance的说明,其任务栈中只有并且仅有一个实例,所以启动A创建一个任务栈,启动C就会创建一个新的任务栈,再启动B又创建了一个新的任务栈,再启动D就不会创建新的任务栈了,而是压入到C的上面。所以总共会有三个任务栈,退出的顺序也会如上所说那样。如果启动顺序为A-C-B-D-A,后退的顺序会是什么呢?答案是A-D-C-B,原理同上面一样。
    
    如果AB是singleTask,按照A-C-B-D的顺序启动,然后依次按back键,后退的顺序是 D-B-C-A.如果启动顺序为A-C-B-D-A会出现什么情况呢?结果是只有A还活着,其它的都会被杀死。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值