Android activity的启动模式 singletop singletask singleinstance
2014-03-28 09:50
459 查看
activity 四种启动模式来实现不同的需求:
standard 默认模式 --------- 来了intent,每次都创建新的实例。
singleTop -------- 来了intent, 每次都创建新的实例,仅一个例外:当栈顶的activity 恰恰就是该activity的实例(即需要创建的实例)时,不再创建新实例。这解决了栈顶复用问题,想一想,你按两次back键,退出的都是同一个 activity,这感觉肯定不爽。使用场景:系统浏览器的书签的activity。
singleTask ---------- 来了intent后,检查栈中是否存在该activity的实例,如果存在,就会清空这个activity所在任务栈上面的所有activity,然后直接复用这个已经存在的activity。解决了在一个task中共享一个activity。使用场景:初始化webkit/c++嵌入式浏览器内核,browseractivity配置成了singleTask。若设置了taskAffinity属性和其他的activity [b]taskAffinity属性都不一样,会新建一个task栈出来。[/b]
singleInstance ----------- 开启一个新的任务栈,把要激活的activity放置到新的任务栈,这个任务栈里面只有一个实例。解决了多个task共享一个activity。使用场景:有道词典,金山。若设置了taskAffinity属性和上一个activity一样则还在一个task栈中,不会另起一个task栈。若有两个不同的栈,返回时先处理完最顶的activity所在的栈,逐一销毁,再处理其他栈。
附带配置文件:
standard 默认模式 --------- 来了intent,每次都创建新的实例。
singleTop -------- 来了intent, 每次都创建新的实例,仅一个例外:当栈顶的activity 恰恰就是该activity的实例(即需要创建的实例)时,不再创建新实例。这解决了栈顶复用问题,想一想,你按两次back键,退出的都是同一个 activity,这感觉肯定不爽。使用场景:系统浏览器的书签的activity。
singleTask ---------- 来了intent后,检查栈中是否存在该activity的实例,如果存在,就会清空这个activity所在任务栈上面的所有activity,然后直接复用这个已经存在的activity。解决了在一个task中共享一个activity。使用场景:初始化webkit/c++嵌入式浏览器内核,browseractivity配置成了singleTask。若设置了taskAffinity属性和其他的activity [b]taskAffinity属性都不一样,会新建一个task栈出来。[/b]
singleInstance ----------- 开启一个新的任务栈,把要激活的activity放置到新的任务栈,这个任务栈里面只有一个实例。解决了多个task共享一个activity。使用场景:有道词典,金山。若设置了taskAffinity属性和上一个activity一样则还在一个task栈中,不会另起一个task栈。若有两个不同的栈,返回时先处理完最顶的activity所在的栈,逐一销毁,再处理其他栈。
附带配置文件:
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.itcast.lunch" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="demo1Activity" <!-- 定义启动模式 --> android:launchMode="singleInstance" android:name=".Demo1Activity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:label="demo2Activity" <!-- 定义启动模式 --> android:launchMode="singleInstance" android:name=".Demo2Activity" > </activity> </application> </manifest></span>
相关文章推荐
- 【Android学习入门】Android中activity的启动模式
- Android总结篇系列:Activity启动模式(lauchMode)
- Android中Activity四种启动模式和taskAffinity属性详解
- Android学习教程(二)之Activity启动模式
- Android中Activity的四种启动模式详解
- Android Activity启动模式
- Android学习之路---Activity四种启动模式
- 自学Android之Activity:(五)Activity启动模式
- Android零基础入门第77节:Activity任务栈和启动模式
- android 设置activity启动模式为singleTask时,intent的传值问题
- Android之Activity的四种启动模式
- Android Activity生命周期及启动模式详解
- android studio for android learning (二十五 )activity的启动模式详解与标志位简析
- 【Android】Activity的启动模式
- Android之Activity的四种启动模式
- Android Activity四种启动模式
- Android基础(一):Activity的任务栈(启动模式等)
- android activity的四种启动模式
- 【Android】 Activity启动模式singleTask的数据传输 onNewIntent方法
- anandroid activity的启动模式 《转》