Activity的加载模式解读
2016-05-26 22:02
281 查看
Android是用launchMode属性来定义activity的加载模式的,如在AndroidManifest里面写:
standard:就是intent将发送给新的实例,所以每次跳转都会生成新的Activity。
singleTop:也是发送给新的实例,但不同于standard的一点是,请求的Activity正好位于栈顶时,不会构造新的实例。可以这样记:top single---如果在栈顶,就使用这一个。
singleTask:和后面的singleInstance都只创建一个实例,当intent到来,系统会检查栈里面是否已经有该Activity的实例,如果有直接将intent发送给它,并使此Activity实例之上的其他Activity实例统统出栈,没有的话才会新建。可以这样记:task single---如果栈里面有,就使用这一个。
需要说明的是:如果栈里面已经有Activity的实例了,当intent到来时,会在onStart()之前调用onNewIntent()方法。
Android中有一个属性android:taskAffinity,是用来给Application或Activity设置“任务共用性”的,默认是包名。如果为一个singleTask模式的Activity设置了该属性,如:android:taskAffinity="com.example.wdong.interviewtwo.aa"那么这个Activity跟该应用的其他Activity就不在同一个task(栈)了,可以使用this.getTaskId()打印出来看一下就清楚了。
singleInstance:将Activity放入一个栈中,并且这个栈中有且只有这一个Activity,不同应用的intent都由这个Activity接收和展示,实际就是不同应用共享同一个Activity,其实这种情况该Activity就相当于一个独立的应用了,不过这个应用仅有这一个Activity而已。
<activity android:name=".Activity2" android:launchMode="singleInstance">
加载模式一共四种,下面分别介绍:
standard:就是intent将发送给新的实例,所以每次跳转都会生成新的Activity。
singleTop:也是发送给新的实例,但不同于standard的一点是,请求的Activity正好位于栈顶时,不会构造新的实例。可以这样记:top single---如果在栈顶,就使用这一个。
singleTask:和后面的singleInstance都只创建一个实例,当intent到来,系统会检查栈里面是否已经有该Activity的实例,如果有直接将intent发送给它,并使此Activity实例之上的其他Activity实例统统出栈,没有的话才会新建。可以这样记:task single---如果栈里面有,就使用这一个。
需要说明的是:如果栈里面已经有Activity的实例了,当intent到来时,会在onStart()之前调用onNewIntent()方法。
Android中有一个属性android:taskAffinity,是用来给Application或Activity设置“任务共用性”的,默认是包名。如果为一个singleTask模式的Activity设置了该属性,如:android:taskAffinity="com.example.wdong.interviewtwo.aa"那么这个Activity跟该应用的其他Activity就不在同一个task(栈)了,可以使用this.getTaskId()打印出来看一下就清楚了。
singleInstance:将Activity放入一个栈中,并且这个栈中有且只有这一个Activity,不同应用的intent都由这个Activity接收和展示,实际就是不同应用共享同一个Activity,其实这种情况该Activity就相当于一个独立的应用了,不过这个应用仅有这一个Activity而已。
相关文章推荐
- 看黑马安卓基础教学视频总结(广播)
- 点赞功能设计,网上的,留个底
- HDFS入门了解心得
- 深度学习(Deep Learning)
- 个人logo 以前的设计
- 一些凌乱的小知识
- Linux系统安装VMware-Workstation-Full-12.1.0-3272444.x86_64.bundle
- java动态代理jdk与cglib详细讲解
- Android圆形头像。简单实用零依赖,拷贝即可使用
- 数据挖掘学习札记:KNN算法(一)
- 如何在SQL中实现条件判断功能?
- Java获得相对路径 - Eclipse下, 运行时, Tomcat下
- https 建立连接过程
- OpenCv显示一张图片
- Knockout.js用jquery的val设置值不更新
- 解决open-vm-tools安装时Failed to get unit file state for run-vmblockx2dfuse.mount
- 基础概念2
- TimesTen可以运行在VMware上吗?
- 基础概念2
- Linux基本命令