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

android:configChanges

这个属性列出了那些需要Activity进行自我处理的配置变化。当在运行时配置变化发生的时候,默认情况下,这个Activity会被关掉并重启,但是用这个属性声明一个配置,就会阻止Activity被重启。相反,这个Activity会保持运行,并且它的onConfigurationChanged()方法会被调用。

注意:应该避免使用这个属性,并且只把它作为最后的手段来使用。有关如何正确处理配置改变期间的重启,请阅读“处理运行是变化”(http://www.13com.net/site/?p=109)

下表中列出了这个属性的有效值,要设置多个值的时候,用“|”符号连接,例如:“locale|navigation|orientation”

说明
mcc IMSI移动国家编码改变时要进行自我处理—系统发现了一个新的SIM卡,并且更新了MCC。
mnc IMSI移动网络编码改变时要进行自我处理—系统发现了一个新的SIM卡,并且更新了MNC
locale 语言环境发生变化时要进行自我处理—用户选择了一种用于显示文本的新语言。
touchscreen 触屏发生变化时要进行自我处理。(这种情况通常不会发生)
keyboard 键盘类型发生变化时,要进行自我处理。例如用户插入了一个外部键盘
keyboardHidden 键盘的可用性发生变化时,要进行自我处理。例如用户启用了硬件键盘。
navigation 导航类型(轨迹球/方向板)发生变化时,要进行自我处理。这种情况通常不会发生。
screenLayout 屏幕布局发生变化时,要进行自我处理。这可能是由被激活的不同的显示方式所导致的变化。
fontScale 字体的缩放因子发生变化时,要进行自我处理。如用户选择了一个新的全局字体尺寸。
uiMode 用户界面发生变化时,要进行自我处理。在把设备放入桌面/轿车内或夜间模式变化时,会导致这种情况发生。它在API级别8中被引入。
orientation 屏幕的方向发生变化时,要进行自我处理。用户旋转设备时会发生这种变化。

注意:如果应用程序的目标API级别是13或更高的版本,那么还应该声明screenSize配置,因为设备在横向和纵向之间切换时,对应的尺寸也会发生变化。

screenSize 当前有效的屏幕尺寸发生变化时,要进行自我处理。这种变化意味着当前可用的相对长、宽比的尺寸发生了变化,因此当用户在横向和纵向之间切换时,就会产生屏幕可用尺寸的变化。但是,如果应用程序是在API级别12或更低的版本上编译的,那么Activity就要始终自己来处理这种变化(这个配置的变化不会重启Activity,即使是运行在Android3.2或更高版本的设备上)。

这个设置在API级别13中被引入。

smallestScreenSize 物理尺寸发生变化时,要进行自我处理。这种变化不关注屏幕方向的变化,只在实际的物理屏幕尺寸发生变化时才会发生,如切换到另一个显示器上的时候。这个变化对应smallestWidth属性的配置来进行改变。如果应用程序是在API级别12或更低的版本上编译的,那么Activity就要始终自己来处理这种变化(这个配置的变化不会重启Activity,即使是运行在Android3.2或更高版本的设备上)。

这个设置在API级别13中被引入。

所有这些配置的改变都会影响到应用中所能看到的资源值。因此,当onConfigurationChanged()方法被调用时,通常需要重新获取所有的资源(包括布局资源、可绘制资源等等),以便能够正确的处理这些改变。

android:enabled

这个属性用于设置Activity是否能够被系统实例化。如果设置为true,则可以被实例化,如果设置为false,则不能被实例化。默认值是true。

<application>元素有它自己的enabled属性,它的这个属性设置会用于应用程序中的所有组件,包括Activity。<application>和<activity>元素的这个属性必须要设置为true(默认情况下都是true),以便系统能够实例化Activity。否则Activity不能被实例化。

android:excledeFromRecents

这属性用于设置由该Activity所启动的任务是否应该被排除在最近使用的应用程序列表之外。也就是说,当这个Activity是一个新任务的根节点时,这个属性决定了这个任务适应要显示在用户最近使用的应用程序列表中。如果设置为true,则这个任务会被排除在列表之外,如何设置为false,则应该包含在最近使用的应用列表中。默认值是false。

android:exported

这个属性用于设置该Activity能否由另一个应用程序的组件来启动,如果设置为true,则可以启动,否则不能启动。如果设置为false,那么该Activity只能被同一个应用程序中的组件或带有相同用户ID的应用程序来启动。

它的默认值要依赖与该Activity是否包含了Intent过滤器。如果没有任何过滤器,则意味着该Activity只能通过明确的类名来调用,这样就暗示者该Activity只能在应用程序内部使用(因为其他用户不会知道它的类名),因此在这种情况下,默认值是false。在另一方面,至少存在一个过滤器,则暗示着该Activity可被外部使用,因此默认值是true。

这个属性不是限制Activity暴露给其他应用程序的唯一方法。还可以使用权限来限制外部实体对该Activity的调用。

android:finishOnTaskLaunch

这个属性用于设置既存的Activity实例,在用户再次启动(在主屏上选择这个任务)它所属的任务时,是否应该被关闭。设置为true,则要关闭,否则不关闭,默认值是false。

如果这个属性和allowTaskReparenting属性都被设置为true,那么这个属性要优于其他属性,Activity的亲缘关系会被忽略。该Activity不会被转移父任务,而是被销毁。

android:hardwareAccelerated

这个属性用于设置该Activity是否应该启用硬件加速渲染。如果设置为true,则启用硬件加速,否则不启用。默认设置是false。

从Android3.0开始,硬件加速的OpenGL渲染器对应用程序可用,以便改善许多共同的2D图形操作的性能。当硬件加速渲染器被启用时,在Canva、Paint、Xfermode、ColorFilter、Shader和Camera中大多数操作都会被加速。这样会使动画、滚动更平滑,并改善整体的响应效果,即使应用程序没有明确要使用框架的OpenGL类库。因为启用硬件加速会增加系统的资源需求,所以应用程序会占用更多的内存。

要注意的是,不是所有的OpenGL 2D操作都会被加速。如果启用了硬件加速渲染,就要对应用程序进行充分测试,以确保所使用的渲染没有错误。

android:icon

这属性定义了代表Activity的一个图标。当Activity被要求显示到屏幕上时,这个图标会被显示给用户。例如,这个图标会显示在Launcher的窗口中,用于启动任务。这个图标经常会和label属性组合使用。

这个属性必须被设置为一个包含图片定义的可绘制资源。如果没有设置,就会使用给应用程序设置的图标来代替。

Activity的图标(或者是<application>元素设置的图标)也是所有的Activity的Intent过滤器的默认图标。

android:label

这个属性给Activity设置了一个可读的标签。当Activity要展现给用户的时候,这个标签会显示在屏幕上,它经常会跟Activity的图标一起来显示。

如果这个属性没有被设置,就会使用给应用程序设置的标签来代替。

Activity的标签(或者是<application>元素设置的标签)也是所有Activity的Intent过滤器的默认标签。

这个属性应该用一个字符串资源来设置。以便它能够在用户界面中用其他的语言来本地化。但是为了开发应用程序的便利,也可以用原始的字符串来设置。

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

发表评论