AndroidManifest.xml文件详解(activity)(四)

android:multiprocess

这个属性用于设置Activity的实例能否被加载到与启动它的那个组件所在的进程中,如果设置为true,则可以,否则不可以。默认值是false。

通常,一个新的Activity实例会被加载到定义它的应用程序的进程中,以便应用程序的所有Activity都运行在同一个进程中。但是,如果这个属性被设置为true,那么这个Activity的实例就可以运行在多个进程中,允许系统在使用它们的进程中来创建实例(权限许可的情况下),这几乎是从来都不需要的事情。

android:name

这个属性用于设置Activity的实现类(Activity的子类)的名字。这个属性值应该是完整的Java类名,如:com.example.project.ExtracurricularActivity。但是,可以用简写的方式,名字第一个字符用“.”符号,如:.ExtracurricularActivity。它对应的包名是在<manifest>元素中指定的。

一旦发布了应用程序,就不应该改变这个名称了(除非设置了android:exported=”false”)。

这个属性没有默认值,名称必须被指定。

android:noHistory

这个属性用于设置在用户离开该Activity,并且它在屏幕上不再可见的时候,它是否应该从Activity的堆栈被删除。如果设置了true,则要删除,否则不删除。默认值是false。

如果设置为true,则意味着Activity不会保留历史轨迹。也就是说,它不会保留在任务的Activity堆栈中,因此用户不能够在返回到这个Activity。

这个属性在API Level 3中被引入。

android:permission

这个属性用于设定启动Activity的客户端或者是响应一个Intent对象的请求所必须要有的权限。如果startActivity()方法或startActivityForResult()方法的调用者没有被授予指定的权限,那么它的Intent对象就不会发送给对应的Activity。

如果这个属性没有设置,那么<application>元素中的permission属性的设置就应用到Activity元素上。如果<application>元素也没有设置,那么这个Activity就不会受到权限的保护。

android:process

这个属性用于设置Activity应该运行的那个进程的名字。通常,应用程序的所有组件都运行在为这个程序所创建的一个默认的进程中。它跟应用程序的包有相同的名字。<application>元素的process属性能够给所有的组件设置一个不同的默认值。但是每个组件都能够覆盖这个默认设置,允许把应用程序分离到多个进程中。

如果这个属性名的值是用“:”开始,那么在需要的时候,就会创建一个应用程序私有的新的进程,这个Activity就会运行在这个进程中。如果进程名使用小写字母开头,那么在权限许可的情况下,该Activity会运行在用它命名的全局进程中。这样就运行不同应用程序的组件能够共享一个进程,从而减少资源的使用。

android:screenOrientation

这个属性用于设置Activity在设备上显示的方向。

属性值可以是下表中列出的一个值:

unspecified 默认值,由系统来选择方向。它的使用策略,以及由于选择时特定的上下文环境,可能会因为设备的差异而不同。
user 使用用户当前首选的方向。
behind 使用Activity堆栈中与该Activity之下的那个Activity的相同的方向。
landscape 横向显示(宽度比高度要大)
portrait 纵向显示(高度比宽度要大)
reverseLandscape 与正常的横向方向相反显示,在API Level 9中被引入。
reversePortrait 与正常的纵向方向相反显示,在API Level 9中被引入。
sensorLandscape 横向显示,但是基于设备传感器,既可以是按正常方向显示,也可以反向显示,在API Level 9中被引入。
sensorPortrait 纵向显示,但是基于设备传感器,既可以是按正常方向显示,也可以反向显示,在API Level 9中被引入。
sensor 显示的方向是由设备的方向传感器来决定的。显示方向依赖与用户怎样持有设备;当用户旋转设备时,显示的方向会改变。但是,默认情况下,有些设备不会在所有的四个方向上都旋转,因此要允许在所有的四个方向上都能旋转,就要使用fullSensor属性值。
fullSensor 显示的方向(4个方向)是由设备的方向传感器来决定的,除了它允许屏幕有4个显示方向之外,其他与设置为“sensor”时情况类似,不管什么样的设备,通常都会这么做。例如,某些设备通常不使用纵向倒转或横向反转,但是使用这个设置,还是会发生这样的反转。这个值在API Level 9中引入。
nosensor 屏幕的显示方向不会参照物理方向传感器。传感器会被忽略,所以显示不会因用户移动设备而旋转。除了这个差别之外,系统会使用与“unspecified”设置相同的策略来旋转屏幕的方向。

注意:在给这个属性设置的值是“landscape”或portrait的时候,要考虑硬件对Activity运行的方向要求。正因如此,这些声明的值能够被诸如Google Play这样的服务所过滤,以便应用程序只能适用于那些支持Activity所要求的方向的设备。例如,如果声明了“landscape”、“reverseLandscape”、或“sensorLandscape”,那么应用程序就只能适用于那些支持横向显示的设备。但是,还应该使用<uses-feature>元素来明确的声明应用程序所有的屏幕方向是纵向的还是横行的。例如:<uses-feature android:name=”android.hardware.screen.portrait”/>。这个设置由Google Play提供的纯粹的过滤行为,并且在设备仅支持某个特定的方向时,平台本身并不控制应用程序是否能够被按照。

android:stateNotNeeded

这个属性用于设置在没有保存Activity状态的情况下,它能否被销毁且成功的重启。如果设置为true,则不引用Activity之前的状态就能够被重启,如果设置为false,重启Activity时,则需要它之前的状态。默认值是false。

通常,Activity在最终被关掉之前,会调用onSaveInstanceState()方法来保存资源。这个方法会用一个Bundle对象来保存Activity的当前状态,然后在这个Activity被重启时,再把这个Bundle对象传递给onCreate()方法。如果这个属性设置为true,onSaveInstanceState()方法就可以不被调用,并且调用onCreate()方法时,会用null来代替Bundle对象,就像Activity被第一次重启一样。

设置为true,会确保Activity在缺省状态下能够被重启。例如,在主屏显示的Activity如果使用这个设置,即使由于某些原因导致Activity崩溃,也会确保它不会被删除。

声明:本文采用 BY-NC-SA 协议进行授权,本文链接:AndroidManifest.xml文件详解(activity)(四)

发表评论