首页 > 代码库 > 详解Android开发中Activity的四种launchMode

详解Android开发中Activity的四种launchMode

Activity栈主要用于管理Activity的切换。当使用Intent跳转至某个目标Activity,需要根据目标Activity的加载模式来加载。

Activity一共有以下四种launchMode:

1.standard:默认,每次使用Intent跳转到目标Activity时都创建一个新的实例。坏处是每次进入都要创建新的实例,执行OnCreate方法。

技术分享

2.singleTop:如果要跳转的目标Activity正好在task的顶部(说明当前肯定不在目标task里,例如我在微信首页,然后想使用Intent跳转到InnoXYZ应用的首页,那么加入InnoXYZ首页正好在InnoXYZ的task顶部,就直接跳转而不会创建实例),那么就直接跳转过去而不会创建新的。(例子,当前在Home Screen, 收到一条微信首页的推送,而此时task栈里的微信task里的Activity栈里的最顶部正好就是微信首页,那么点击推送就直接进入该实例而不会创建新的实例)

技术分享

3.singleTask:会在一个新的task中产生这个实例,以后每次调用都会使用这个,不会去产生新的实例了。

4.singleInstance:是其所在栈的唯一activity,它会每次都被重用。

launchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例,是否和其他Activity实例公用一个task里。这里简单介绍一下task的概念,task是一个具有栈结构的对象,一个task可以管理多个Activity,启动一个应用,也就创建一个与之对应的task。

我们可以在AndroidManifest.xml配置<activity>的android:launchMode属性为以上四种之一即可。

 

 

android:exported

  1. 在Activity中该属性用来标示:当前Activity是否可以被另一个Application的组件启动:true允许被启动;false不允许被启动。

  2. android:exported 是Android中的四大组件 Activity,Service,Provider,Receiver 四大组件中都会有的一个属性。

  3. 总体来说它的主要作用是:是否支持其它应用调用当前组件。

详解Android开发中Activity的四种launchMode