首页 > 代码库 > Activity属性

Activity属性

1.android:allowTaskReparenting

设置为true:当和这个Activity有亲缘关系的task被切换到前台的时候,把这个Activity从它的启动task中移动到亲缘关系的task中。

设置为false:不移动。默认值为false。

一般来说,一旦activity启动,它就属于启动它的task,它整个生命周期都会停留在这个task中。可以使用这个属性来为activity从新确认父task,当它当前的所属的task不在前台显示的时候。

例子:e-mail信息里面有一个链接,点击这个链接会进入到web页面。这个web页面的activity是浏览器app里面定义的,但是作为e-mail task的所属activity而启动。当这个activity重新确定它的父task为浏览器task之后,当浏览器task被切换到前台的时候,这个activity会被显示,而email task切换到前台的时候不会。

acticity的亲缘属性是由taskAffinity属性确定。而一个task的亲缘属性,则由它的根activity确定。因此,根activity总是位于和它具有一致亲缘属性的task中。具有singleTasksingleInstance启动的模式的activity只能是一个task的根activity,所以重新确定task的功能只能限制在standard和singleTop启动模式的activity上使用。

2.android:alwaysRetainTaskState

无论这个task所属的task状态如何,系统都会保持这个状态不变当设置为true的时候,当设置为false,允许系统在一定条件下将task恢复到初始化的状态。默认值为false。这个值只对根activity有意义,其他的activity的这个属性值会被忽略。

一般,当用户重新在home屏幕上选择这个task的时候,系统会清除这个task,把根activity以上的activity从task中移除。典型的,当用户没有操作这个task超过一定时间,比如说30分钟,以上动作就会执行。

如果以上属性的设置值为true,那么用户再次回到这个task的时候一直都是保持最后的状态。

3.android:clearTaskOnLaunch

当重新从home上启动这个task的时候是否移除除了根activity以外的所有activity。设置为true,移除,false不移除。默认值为false。这个属性只对根activity切属性为new task的activity有效,对于其他的activity,忽略这一属性。

当设置属性为true,每次当用户重新在home上启动这个task,都会重新回到根acticity,不管最后这个task在做什么,也不管这个task的是通过back还是home按键离开最后的状态的。当设置为false的时候,task只有在某些情况下才会被清除,比如设置了android:alwaysRetainTaskState属性的时候。

如果这个属性和allowTaskReparenting同时被设置为true,那么任何一个可以重新确定父task的activity都会被移动到和activity具有亲缘关系的task中去,其他的activity就会被删除。

4.android:configChanges

列出activity自己处理的配置改变的情况。当activity的配置改变的时候,默认是会被关闭然后重新启动。通过设置这一属性可以阻止activity被关闭和重新启动,activity将会继续运行,它的onConfigurationChanged()函数会被调用。

5.android:enabled

是否activity可以被系统实例化。true,可以。false,不可以。默认值为true。<application>元素的enabled属性会被应用到所有的application的组件上,包括activity。

6.android:excludeFromRecents

是否这个activity所发起的task被排除在最近使用的app之外。就是说,activity的这个属性决定了以此activity作为root activity的task能够出现在最近使用的app列表中。

7.android:exported

是否这个activity可以被其他应用的组件启动。如果设置为false,就只能被属于同一应用的组件启动,或者拥有同一用户id的应用的组件启动。默认值取决于activity是否具有intent的过滤器。如果一个activity没有设置任何的intent过滤器就只能通过指定准确的类名来启动了。这就隐士的表明,这个activity只能在应用内部使用,因为外部应用不会知道它准确的名字。在这种情况下,默认值为false。另一方面,如果有至少一个intent过滤器表明这个activity可以从外部被启动,那么这个属性值就是true。

8.android:hardwareAccelerated

是否允许这个activity使用硬件加速渲染。

9.android:launchMode

四种启动模式:standardsingleTopsingleTassingleInstance。默认值为standard

四种模式分为两组:standard和singleTop一组,singleTask和singleInstance一组。前者可以被实例化多次,可以属于多个task,并且可以位于task的任何位置。一般的通过startActivity()函数启动(排除intent带有FLAG_ACTIVITY_NEW_TASK标志的情况,这种情况下activity将会选择一个新的task。)。

相反的,singleTask和singleInstance只能位于一个task。它们一般是activity stack的根activity。也就说,设备在同一时刻只能有一个这样的activity。

standard和singleTop只有一点不相同。对于standard模式,每调用一次intent就会产生一个实例,对于singleTop,如果目标task的顶部已经存在一个相同的task就不会创建新的实例了,而是这个实例会接收onNewIntent()函数调用。

singleTask和singleInstance也只有一个方面不一样。singleTask位于task的最底部,但是它允许其他的activity位于它的task,而singleInstance不允许,整个task中只有它一个activity。如果它启动一个新的activity,新启动的activity会被分配到一个不同的task,如果intent里带有FLAG_ACTIVITY_NEW_TASK标志。

10.android:multiprocess

是否可以在多个进程中实例化。

11.android:noHistory

当这个activity在屏幕上不可见之后,是否从stack中移除,再也不能恢复。

12.android:parentActivityName

系统以此决定启动那一个activity,当用户在action bar上压下Up按钮

13.android:process

一般而言,一个应用的所有组件运行在一个进程中。当设置了这个名字之后,activity可以运行在自己的进程中。如果名字以冒号开头,那么这个进程是这个应用私有进程;如果是以小写开头的名字,那么这个进程是全局进程。

14.android:stateNotNeeded

这个activity是否可以在杀死之后成功的restart,而不用使用它之前保存的状态。默认是false。一般的,一个activity因为资源问题而被临时的关闭的时候,会调用onSaveInstanceState()函数保存它当前的状态,如果这个属性被设置为true,那么在oncreate函数中的Bundle参数就会被null代替。

15.android:taskAffinity

在概念上拥有同一taskAffinity值的activity属于同一task,task的taskAffinity取决于它的根activity。默认情况下,同一个应用的所有activity具有相同的taskAffinity

如果这个值没有设置,那么就会使用<application>元素的taskAffinity,默认会使用包名。


原文http://developer.android.com/guide/topics/manifest/activity-element.html