Activity的四种启动模式

Activity  四种启动模式:

           Standard   SingleTop    SingleTask    SingleInstance

           1) Standard

                默认的启动模式,不用我们手动为<activity>配置android:launchMode属性.只要开启都会创建一个新的Activity实例放在任务栈中,eg:我们创建了俩个Activity实例,我们需要按回退键两次才能回到最初的Activity.而且被开启的Activity的任务栈和开启他的Activity任务栈是同一个!


           2)SingleTop

               当使用这种启动模式的Activity在栈的时候,再次开启,就不会创建新的Activity.也就是说使用的都是同一个FirstActivity实例;如果按一下后退键,程序立即退出,说明当前栈结构中只有一个Activity实例。
               如果是多个Activity怎么办?如果不是在栈顶会如何?eg:当从SecondActivity跳转到FirstActivity时,系统发现存在有FirstActivity实例,但不是位于栈顶,于是重新生成一个实例。这就是singleTop启动模式,如果发现有对应的Activity实例正位于栈顶,则重复利用,不再生成新的实例。

          3)SingleTask

              在同一个栈中只能有唯一的Activity实例,如果要跳转至已存在的singleTask模式的Activity,那么会清除这个Activity以上的所有Activity把他显示出来!eg:FirstActivity设置为SingleTask模式,SecondActivity跳转到FirstActivity    不会生成新的实例.但是从FirstActivity跳转到SecondActivity时生成了新的实例。SecondActivity跳转到FirstActivity后的栈结构发生变化,SecondActivity消失了,没错,在这个跳转过程中系统发现有存在的FirstActivity实例,于是不再生成新的实例,而是将FirstActivity之上的Activity实例统统出栈,将FirstActivity变为栈顶对象,显示到幕前。也许朋友们有疑问,如果将SecondActivity也设置为singleTask模式,那么SecondActivity实例是不是可以唯一呢?在我们这个示例中是不可能的,因为每次从SecondActivity跳转到FirstActivity时,SecondActivity实例都被迫出栈,下次等FirstActivity跳转到SecondActivity时,找不到存在的SecondActivity实例,于是必须生成新的实例。但是如果我们有ThirdActivity,让SecondActivity和ThirdActivity互相跳转,那么SecondActivity实例就可以保证唯一。

         4)SingleInstance

             它的启动模式比较特殊,因为它会启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入。FirstActivity的launchMode="standard",SecondActivity的launchMode="singleInstance"从FirstActivity跳转到SecondActivity时,重新启用了一个新的栈结构,来放置SecondActivity实例,然后按下后退键,再次回到原始栈结构;



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值