分类归档:Android

AndroidManifest.xml文件详解(activity-alias)

语法(SYNTAX):

<activity-aliasandroid:enabled=["true" | "false"]
 android:exported=["true" | "false"]
 android:icon="drawable resource"
 android:label="string resource"
 android:name="string"
 android:permission="string"
 android:targetActivity="string">
 . . .
</activity-alias>

被包含于(CONTAINED IN):

<application>

能够包含的元素(CAN CONTAIN):

<intent-filter>

<meta-data>

说明(DESCRIPTION):

这个元素用于给targetActivity属性所指定Activity设定一个别名,目标Activity必须跟别名Activity在同一个应用程序中,并且这个Activity必须在别名之前被声明。

read more

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

android:taskAffinity

这个属性用于跟Activity有亲缘关系的任务。带有相同亲缘关系的Activity,在概念上是属于相同任务的(从用户的角度看,它们是属于同一应用程序的)。任务的亲缘关系是通过它的根节点的Activity的亲缘关系来判定的。

亲缘关系决定了两件事情:1.Activity能否重新设定父任务(看allowTaskReparenting属性);2.这个任务能够包含用FLAG_ACTIVITY_NEW_TASK标记启动的Activity。

read more

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

android:multiprocess

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

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

android:name

read more

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

android:launchMode

这个属性定义了应该如何启动Activity的一个指令。有四种工作模式会跟Intent对象中的Activity标记(FLAG_ACTIVITY_*常量)结合在一起用来决定被调用Activity在处理Intent对象时应该发生的事情,这四种模式是:

standard

singleTop

singleTask

singleInstance

默认的模式是standard。

read more

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中被引入。

read more

Android应用资源—处理运行时改变(Handing Runtime Changes)

某些设备配置能够在运行期间进行改变(如屏幕的方向、键盘可用性、语言等)。当这样的改变发生时,Android会重启正在运行的Activity(onDestroy()回调之后,紧跟着调用onCreate()回调方法)。设计这种重启行为有助于应用程序通过重启,重新载入跟新设备配置相匹配的可选资源。

要正确的处理重启,重要的是要恢复Activity之前的生存周期状态,因此在Activity被销毁之前,Android会调用onSaveInstanceState()回调方法来保存应用程序相关的状态数据。这样在Activity的onCreate()或onRestoreInstanceState()被调用期间就可以恢复之前的状态了。

read more

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

<activityandroid:allowTaskReparenting=["true" | "false"]
 android:alwaysRetainTaskState=["true" | "false"]
 android:clearTaskOnLaunch=["true" | "false"]
 android:configChanges=["mcc", "mnc", "locale",
 "touchscreen", "keyboard", "keyboardHidden",
 "navigation", "screenLayout", "fontScale", "uiMode",
 "orientation", "screenSize", "smallestScreenSize"]
 android:enabled=["true" | "false"]
 android:excludeFromRecents=["true" | "false"]
 android:exported=["true" | "false"]
 android:finishOnTaskLaunch=["true"
read more

AndroidManifest.xml文件详解(action)

语法(SYNATX):

&lt;actionandroid:name="<em>string</em>"/&gt;

包含于(CONTAINED IN):

<intent-filter>

说明(DESCRIPTION):

给Intent过滤器添加一个操作。一个<intent-filter>元素必须包含一个或多个<action>元素,如果一个也没有包含,那么就不会有Intent对象通过过滤器。

属性(ATTRIBUTES):

android:name

read more

AndroidManifest.xml文件详解(二)

文件约定

某些约定和规则普遍适用于清单中的所有元素和属性:

元素

只用<manifest>和<application>元素时必须的,而且这两个元素在文件中只能出现一次。其他元素则可以多次出现在清单中,或者根本就不出现—但是为了构建一个有意义的清单,必须要在清单中声明某些元素。

一个元素所包含的任何声明,包括它所包含的其他元素,所有的值都是通过属性来设置的,而不是用夹在开闭元素之间的字符数据。

相同级别的元素通常是没有顺序的。例如,<activity>、<provider>、<service>元素可以是任意顺序的。(<activity-alias>元素是个例外,它必须放在它所代表的<activity>元素的后面。)

属性

在正式的含义中,所有的属性都是可选的,但是,为了达成目的,必须要给元素指定一些属性。对于真正的可选属性,会指定发生在特殊情况下的默认值或状态。

除了<manifest>根元素的一些属性之外,其他所有属性的命名都带有android:前缀—例如,android:alwaysRetainTaskState。因为这个前缀是通用的,所以本文档在提到属性名时,通常会忽略这个前缀。

声明类名称

许多元素都对应着Java对象,包括代表应用程序自己的元素<application>,以及基本的组件—<activity>、<service>、<receiver>、<provider>等。

如果要定义子类,那么这些子类几乎总是继承以下组件类:Activity、Service、BroadcastReceiver、ContentProvider。子类是通过name属性来声明的。这个名称必须是完整Java包名。例如,下例演示了Service子类的声明方法:

<manifest . . . >
    <application . . . >
        <service android:name="com.example.project.SecretService" . . . >
            . . .
        </service>
        . . .
    </application>
</manifest>

但是,也可以使用简略的表达方式,用”.”符号做为name属性值的第一个字符。在Android系统解析是会在”.”符号前追加包名(包名是在<manifest>元素的package属性中声明的)。下例的声明方法与上例的结果相同:

<manifest package="com.example.project" . . . >
    <application . . . >
        <service android:name=".SecretService" . . . >
            . . .
        </service>
        . . .
    </application>
</manifest>

在启动组件时,Android会创建这个命名子类的一个实例对象。如果没有指定子类,那么就会创建一个基类的实例对象。

多个值的设定

如果要给一个元素指定多个值,那么几乎总是重复使用这个元素,而不是在一个元素中列出多个值。如:

<intent-filter . . . >
    <actionandroid:name="android.intent.action.EDIT"/>
    <actionandroid:name="android.intent.action.INSERT"/>
 
read more