Android中Activity的启动模式详解

Android的Activity有四种启动模式,分别是:

standard
singleTop
singleTask
singleInstance

启动模式需要在AndroidManifest.xml对Activity进行设置

如:

<activity  
    android:name="Activity Name"  
    android:launchMode="standard" /> 

不同的启动模式有不同的作用,这点很重要,一般初学者会忽视启动模式。


standard:

默认情况下,Activity的启动模式为standard,该模式为:不管task中有什么Activity,都会启动一个新的Activity。所以该模式下有可能你的task中有重复的Activity。


singleTop:

该模式下,task的顶部、栈顶如果是需要启动Activity,则会启动这个旧的已存在的Activity,如果不是则像standard模式一样创建一个新的Activity。

一般情况下,我们都使用这种模式,这种模式可以避免我们重复创建当前Activity。

另外,如果通过startActivity,则会调用该Activity的onNewIntent(Intent intent)方法。


什么时候需要使用该模式?

举个例子:用户使用App,界面停留在Activity A,用户按Home键退到后台,这时我们的App发送了一个通知栏信息,我们需要用户点击通知栏信息跳转到我们原来的那个Activity A,那么如果Activity A是standard模式,那么如果start Activity A,则会创建一个新的Activity A,那么task中就会有两个Activity,用户按下back,还是Activity A,这么肯定不行的,这时候就使用singleTop模式了,通过onNewIntent方法获得Intent对象来更新界面等操作。


singleTask:

该模式下,task中只会存在唯一的Activity,如果需要启动的Activity已经存在task中,则会destory在它之上的所有Activity,并调用它的onNewIntent方法,如果不存在,则standard模式一样创建一个新的Activity。

该模式很像singleTop对不对?但却存在明显的区别,singleTop不会销毁它上面的Activity,如果不是顶部则会重新创建。


需要注意的是:该模式下,如果启动Activity使用的是startActivityForResult方法,那么启动它的Activity的onActivityResult方法并不会在被启动的Activity的finish后被调用。很绕口对不对?

通俗点讲:有一个Activity A,它通过startActvityForResult方法启动了Activity B,按我们以前的想法,在Activity A中的onActivityResult方法会在Activity B 结束之后被调用,但遗憾的是如果Activity B是singleTask,那么并不会发生这样的调用,而是在启动Activity B的时候就调用了onActivityResult。


那么什么时候需要改模式?

举个例子:比如我们有个登陆界面,登陆界面有个QQ第三方登陆,用户点击这个第三方登陆跳转到QQ的授权页,我们需要QQ授权后回到我们的登陆界面上进行自己服务器的登陆操作,当然你可以想到很多种方式来处理这个逻辑,比如在登陆界面的onResume()方法中进行判断处理等。但如果用到模式方式,我们只需要更改登陆界面为singleTask,然后在QQ第三方登陆的回调中startActivity启动登陆界面即可,这样会启动登陆界面的onNewIntent方法,并且将它上面的其他Activity全部移除。

singleInstance

改模式下,task中只会存在唯一一个Activity,并且Activity所处的task与其他task分开。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值