android 基础(一):activity启动方式standard、singleTop、singleTaste、singleInstance
2016-01-18 10:18
211 查看
好记性不如烂笔头嘛!
android activity的启动方式一共有四种,设置方式为在AndroidManifest.xml文件中通过给<activity>标签指定android:launchMode属性来设置启动模式。启动方式:
standard:默认启动方式,一般没有设定启动方式就是这种了。
android中对于activity有一个返回栈来进行管理,这种默认的启动方式是将每一个新启动的activity(不管栈中是否已有该activity存在)加入到栈 顶,每次启动都会返回该activity的一个新的实例。
singleTop:这种启动方式会在activity启动时去返回栈中看一看,如果栈顶恰好是你正要启动的activity,那就巧了,这时就会直接返回将栈顶存在的activity实例咯。
singleTask:(1)这种启动方式在activity启动时也会去返回栈中去瞧一瞧,如果在栈里面发现要启动的activity已经存在了,就把栈里面压在该activity之上的所有activity都请出去,直接使用已存在的activity实例。如果栈里面没有找到要启动的activity,那就只有建一个新的放到栈里面咯。
singleTask可以使用taskAffinity属性为当前activity指定所属的栈。如果不设置该属性,一个应用中的所有activity都是默认在一个返回栈中进行管理的,该属性的设置会在activity启动时去检索是否有taskAffinity所指栈名的栈存在,存在则再去该栈中查找要启动的activity是否存在,执行上面(1)所述操作;不存在则会新起一个名为taskAffinity指定的新栈来放该activity。 将不同应用中的activity的taskAffinity设为一致可以使不同应用中的activity分配到同一个栈中,此种应用场景可以理解为:例如在某一应用app1中activity1需要发邮 件,于是调用了某个发邮件的应用app2中的activity2,app1、app2在AndroidManifest.xml中设置的启动方式都为singleTask并且设置了相同taskAffinity值为com.sendmail,那么activity1和activity2将会被分配到同一个名为com.sendmail的栈中,当邮件发送完成后,点击返回键,就会将 com.sendmail中的activity2出栈,此 时便会回到app1中的activity1界面上而不是直接退回到系统桌面了。 此种启动启动方式有一种比较好记的理解方式:singleTask—single in task 在同一个栈中只存在一个当前activity实例,若栈中已存在则将其上activity出栈得到该activity实例,不存在则新建一个入栈。还可以为当前activity指定所要入的栈为哪一个栈
singleInstance:以singleInstance模式启动的Activity具有独占性,即它会独自占用一个栈,被他开启的任何activity都会运行在其他栈中,但并不意味着每启动一个activity都会新建一个栈来,而是可为其指定一个新的栈,这个新的栈可以使新建的也可以是已存在的栈。
和singleTask一样,可以通过taskAffinity来为activity指定一个要去到的栈,如果存在这样的一个栈,则检查在这个任务中是否已经有了一个activity的实例, 如果已经存在一个activity的实例,则会重用这个栈和栈中的activity实例,将这个任务调到前台,清除位于activity上面的所有Activity,显示activity。 如果不存在一个activity的实例,会在这个任务中创建activity的实例。如果不存在这样的一个任务,会创建一个新的栈,并且将activity启动到这个新的栈中。
此种启动方式可以实现当多个不同的应用程序app1 activity1、app2
activity2、app3
activity3都要使用app4中的一个activity4,那么当分别在app1、app2、app3调用activity4时将activity4的启动模式设置为singleInstance 设置askAffinity为一个新的栈com.share,那么activity1、activity2、activity3、activity4都会在com.share中共享activity4实例。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories