Activity的属性之—launchMode

发布时间:2020-06-28 01:41:57 作者:poarry
来源:网络 阅读:933

Activity的属性之—launchMode

manifest清单文件中配置activity的时候,有一个属性叫launchMode

<Activity   ……

 android:launchMode=["multiple" | "singleTop"
                             
"singleTask" | "singleInstance"


/>

LaunchMode 指定该activity的加载模式,如上所述加载模式有四种分别是 standard singleTopsingleTask   singleInstance .

为什么要指定activity的加载模式呢?因为Android系统对activity是通过栈来管理的,当应用启动的时候相应的系统就会为这个应用创建一个栈,然后启动应用的main activity

就相当于数据结构中的出栈和入栈一样的管理本应用中的activity。而activity的加载模式就可以管理activity的实例化和加载方式,以及加载的顺序关系等。

 那么下面来介绍一下这四种加载模式:

1、 standard

这个模式是activity默认启动模式,也就是说在不指定activitylaunchMode的情况下就是按照这种模式启动的,这种模式下每次启动一个新的activity的时候都会为目标activity创建一个新的实例,并将此实例添加到栈中(也就是在栈顶)(PS一般的那个钱显示给用户的activity都在栈顶)。

 

2、 singleTop

在这个模式下的时候,在启动目标的activity的时候,如果当前应用的栈中的栈顶已经是目标activity的实例的话那么就不会重新创建新的实例,而直接使用栈顶的实例。(如果被启动目标没有在栈顶,那么此时系统会重新创建一个该activity的实例并将它加载到栈顶,这时它和standard模式完全一样)

3、 singleTask

这种模式下,如果当前栈中有将要启动activity的实例那么直接调用这个实例,也就是在同一个栈中只有一个实例。使用 singleTop模式可以很好地解决重复创建栈顶活动的问题,但是如果该activity并没有处于栈顶的位置,还是可能会创建多个activity实例的。那么有没有什么办法可以让某个activity在整个应用程序的上下文中只存在一个实例呢?这就要借助singleTask模式来实现了。当activity的启动模式指定为 singleTask,每次启动该activity时系统首先会在返回栈中检查是否存在该activity的实例,如果发现已经存在则直接使用该实例,并把在这个activity之上的所有activity统统出栈,如果没有发现就会创建一个新的activity实例

4、 singleInstance

singleInstance模式应该算是四种启动模式中最特殊也最复杂的一个了,你也需要多花点功夫来理解这个模式。不同于以上三种启动模式,指定为 singleInstance模式的activity会启用一个新的返回栈来管理这个activity(其实如果singleTask模式指定了不同的 taskAffinity,也会启动一个新的返回栈)。那么这样做有什么意义呢?想象以下场景,假设我们的程序中有一个activity是允许其他程序调用的,如果我们想实现其他程序和我们的程序可以共享这个activity的实例,应该如何实现呢?使用前面三种启动模式肯定是做不到的,因为每个应用程序都会有自己的返回栈,同一个activity在不同的返回栈中入栈时必然是创建了新的实例。而使用singleInstance模式就可以解决这个问题,在这种模式下会有一个单独的返回栈来管理这个activity,不管是哪个应用程序来访问这个activity,都共用的同一个返回栈,也就解决了共享activity实例的问题。

 

顺便看下api文档的介绍片段:

摘自 http://developer.android.com/guide/topics/manifest/activity-element.html#lmode


大概意思和我上面翻译的差不多, 欢迎指正 poarryScript@gmail.com


推荐阅读:
  1. Android中Activity有哪些常用的属性
  2. Activity的四种LaunchMode

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

启动模式 android activity

上一篇:golang语言渐入佳境[17]-mapping表

下一篇:华御密盾智能防信息泄密系统

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》