activity的一些属性值详解
来源:互联网 发布:java分解质因数 编辑:程序博客网 时间:2024/06/07 09:11
taskAffinity
它指明当前的activity所希望属于的栈。如果没有指定,就按<application>中的taskAffinity的值,如果后者也没有指定,就指的是在清单文件中声明的包名。一个栈有一个affinity,它的值指的是这个栈的根activity的taskAffinity的值。因此,当所有的activity都不指定taskAffinity的时候,这些activity都会进入同一个栈中(因为taskAffinity的值都是清单文件中声明的包名)。
allowTaskReparenting
是否允许当前的activity重新宿主到具有相同的affinity的栈中,当该栈处于前台时。假设应用A有一个activityA的taskAffinity的值为com.example.demo1,且allowTaskReparenting为true;应用B有一个activityB的taskAffinity也为com.example.demo1。那么先运行应用A,运行后按小房子。再运行应用B,这时会发现显示的是activityA的内容。这是因为,activityA允许该activity重新宿主。因此,当activityB启动的时候,会建立一个affinity为com.example.demo1的栈,这个栈的affinity和activityA的taskAffinity一样,所以activityA就重新宿主(也就是移动到了activityB启动的栈中)了。再比如,应用A中启动了应用B的activityA(该activity的此属性值为true),那么当运行应用B时,显示的会是activityA(从应用A的task中重宿到应用B的task中)。
excludeFromRecents
是否从最近浏览中删除。如果为true,则在最近浏览中无该应用图标,否则有。默认值为false。
exports
是否允许别的应用程序打开该activity,true是允许。false是不允许。它的默认值是根据<intent-filter>来的,如果含有<intent-filter>,则默认值为true。否则默认值为false。
stateNotNeeded
在正常情况下,在一个activity调用finish()之前会调用onSavaInstanceState()用来保存该activity的状态,并会将它的状态存储到一个Bundle的对象中。当该activity再次启动时,就会把该Bundle对象传到onCreate()方法中。如果该属性设置为true了,那么就不会调用onSavaInstanceState()方法,那么onCreate()方法中传入的参数就是null,就像该activity第一次被创建时一样。默认值是false。
alwayRetainTaskState
当某个栈处于后台的时间过长,系统会自动回收这个栈中的除了根activity外的所有activity。如果在根activity设置了该属性并且值为true,那么这个栈中的所有activity都不会被系统回收,无论离开多长时间。
clearTaskOnLaunch
根activity该值为true,那么该栈中除了根activtiy外的所有activity,在该栈一进入后台的时候都会被清空。如果allowTaskReparenting与clearTaskOnLaunch都设置为true,那么在启动某一个栈的时候,该栈中能重新宿主的activity都会重新宿主,不能重新宿主的activity都会被清掉。该属性只对根activity设置有效,task中其它activity设置无效。
finishOnTaskLaunch
它和clearTaskOnLaunch类似,但是只能作用于一单个的activity,而不能作用于一个栈。当某一个activity的该属性值设置为true时,该activity所处的栈再次处于前台时,这个activity会finish掉,即使它设置了allowReparenting=true。
启动模式
定义activity的启动模式有两种方式:清单文件和通过intent.setFlag()。如果两者同时存在,以后者为准。
standard
标准启动模式。谁启动了该activity,那么该activity就会运行在启动它的activity所在的栈中。因此,在非activity中启动activity时,必须为intent设置FLAG_ACTIVITY_NEW_TASK标识,因为非activity没有任务栈。
singleTask
参考
1. 设置了"singleTask"启动模式的Activity,它在启动的时候,会先在系统中查找属性值affinity等于它的属性值taskAffinity的task是否存在;如果存在,它就会在这个任务中启动,否则就会在新任务栈中启动。因此,如果我们想要设置了"singleTask"启动模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity属性值。这也可以解释为什么在同一个应用中启动singleTask的activity会是在同一个task,而不同应用中启动时却不是同一个task。因为默认时目标activity的taskAffinity为应用的包名,不同应用时taskAffinity与启动activity所在的task的affinity值不一致,因此目标activity会在新的task中启动。
2. 如果设置了"singleTask"启动模式的Activity不是在新的任务中启动时,它会在已有的任务中查看是否已经存在相应的Activity实例,如果存在,就会把位于这个Activity实例上面的Activity全部结束掉,即最终这个Activity实例会位于任务的堆栈顶端中。如果不存在,就新建一个目标activity的实例,并压入相应的task的顶端。
3,如果目标activity不是在新task中启动,那么目标activity所在的task会被挪移到前台,从而该task中的activity位于启动activity前面。如下:
文字说明为:A representation of how an activity with launch mode "singleTask" is added to the back stack. If the activity is already a part of a background task with its own back stack, then the entire back stack also comes
forward, on top of the current task.
singleInstance
新建一个栈,并将该activity放到该栈中,而且这个栈中不会放入别的任意的activity。
当启动模式为上述两种时,startActivityForResult()是无效的。onActivityResult()会立即执行,并且resultCode为RESULT_CANCELED。
- activity的一些属性值详解
- <activity>标签的一些属性
- 【Android】Activity的一些属性
- Task和Activity相关的一些属性
- Task和Activity相关的一些属性
- Activity的一些相关属性总结
- Task和Activity相关的一些属性
- Activity 的属性之android:screenOrientation详解
- <activity>标签中activity:windowSoftInputMode的属性详解
- Activity属性官方详解
- Activity XML 属性详解
- IOS 之 CAlayer的一些属性详解
- Activity-android:windowSoftInputMode属性详解
- Activity下WindowSoftInputMode属性详解
- Activity详解(2.属性)
- Android Activity的属性及启动模式相关详解
- Android Activity的属性及启动模式相关详解
- Android清单文件详解(六) ---- <activity>节点的属性
- ubuntu14.04出现的依赖问题
- OutputCache概念学习
- c++中的4种显式类型的转换
- c++笔记(9):联编、虚函数和多态性、异质表
- winform DataGridView 属性说明
- activity的一些属性值详解
- 传统企业互联网转型升级新玩法:技术合伙
- springMVC拦截器处理ajax请求及数据返回
- mysql Slave_IO_Running:NO 或者connecting(爬坑录)
- linux安装vsftp出现本地用户无法访问
- 杭电1327 Knight Moves 马走日
- 七天使的通讯
- pythonDB
- CSS3的选择器