<activity>

语法
<activity android:allowEmbedded=["true" | "false"]
          android:allowTaskReparenting=["true" | "false"]
          android:alwaysRetainTaskState=["true" | "false"]
          android:autoRemoveFromRecents=["true" | "false"]
          android:banner="drawable resource"
          android:canDisplayOnRemoteDevices=["true" | "false"]
          android:clearTaskOnLaunch=["true" | "false"]
          android:colorMode=[ "hdr" | "wideColorGamut"]
          android:configChanges=["colorMode", "density",
                                 "fontScale", "fontWeightAdjustment",
                                 "grammaticalGender", "keyboard",
                                 "keyboardHidden", "layoutDirection", "locale",
                                 "mcc", "mnc", "navigation", "orientation",
                                 "screenLayout", "screenSize",
                                 "smallestScreenSize", "touchscreen", "uiMode"]
          android:directBootAware=["true" | "false"]
          android:documentLaunchMode=["intoExisting" | "always" |
                                  "none" | "never"]
          android:enabled=["true" | "false"]
          android:enabledOnBackInvokedCallback=["true" | "false"]
          android:excludeFromRecents=["true" | "false"]
          android:exported=["true" | "false"]
          android:finishOnTaskLaunch=["true" | "false"]
          android:hardwareAccelerated=["true" | "false"]
          android:icon="drawable resource"
          android:immersive=["true" | "false"]
          android:label="string resource"
          android:launchMode=["standard" | "singleTop" |
                              "singleTask" | "singleInstance" | "singleInstancePerTask"]
          android:lockTaskMode=["normal" | "never" |
                              "if_whitelisted" | "always"]
          android:maxRecents="integer"
          android:maxAspectRatio="float"
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:noHistory=["true" | "false"]  
          android:parentActivityName="string" 
          android:persistableMode=["persistRootOnly" | 
                                   "persistAcrossReboots" | "persistNever"]
          android:permission="string"
          android:process="string"
          android:relinquishTaskIdentity=["true" | "false"]
          android:requireContentUriPermissionFromCaller=["none" | "read" | "readAndWrite" |
                                                         "readOrWrite" | "write"] 
          android:resizeableActivity=["true" | "false"]
          android:screenOrientation=["unspecified" | "behind" |
                                     "landscape" | "portrait" |
                                     "reverseLandscape" | "reversePortrait" |
                                     "sensorLandscape" | "sensorPortrait" |
                                     "userLandscape" | "userPortrait" |
                                     "sensor" | "fullSensor" | "nosensor" |
                                     "user" | "fullUser" | "locked"]
          android:showForAllUsers=["true" | "false"]
          android:stateNotNeeded=["true" | "false"]
          android:supportsPictureInPicture=["true" | "false"]
          android:taskAffinity="string"
          android:theme="resource or theme"
          android:uiOptions=["none" | "splitActionBarWhenNarrow"]
          android:windowSoftInputMode=["stateUnspecified",
                                       "stateUnchanged", "stateHidden",
                                       "stateAlwaysHidden", "stateVisible",
                                       "stateAlwaysVisible", "adjustUnspecified",
                                       "adjustResize", "adjustPan"] >   
    ...
</activity>
包含在
<application>
可以包含
<intent-filter>
<meta-data>
<layout>
描述
声明一个活动(一个Activity子类),它实现应用程序视觉用户界面的一部分。所有活动都必须在清单文件中由<activity>元素表示。任何未在此处声明的活动都不会被系统看到,也永远不会运行。
属性
android:allowEmbedded

指示活动可以作为另一个活动的嵌入式子活动启动,尤其是在子活动位于容器(例如另一个活动拥有的Display)中的情况下。例如,用于 Wear 自定义通知的活动声明此属性,以便 Wear 可以在其上下文流(位于另一个进程中)中显示该活动。

此属性的默认值为false

android:allowTaskReparenting
活动是否可以从启动它的任务移动到它具有关联性的任务(当该任务下次被调到前台时)。如果可以移动,则为"true";如果保持在启动它的任务中,则为"false"

如果未设置此属性,则allowTaskReparenting的相应<application>元素属性设置的值将应用于该活动。默认值为"false"

通常,当启动活动时,它与启动它的活动的关联任务相关联,并且在其整个生命周期中都保留在此任务中。您可以使用此属性强制它在当前任务不再显示时重新关联到它具有关联性的任务。通常,这用于使应用程序的活动移动到与该应用程序关联的主任务。

例如,如果电子邮件包含指向网页的链接,则单击该链接会调出一个可以显示该页面的活动。该活动由浏览器应用程序定义,但作为电子邮件任务的一部分启动。如果它重新关联到浏览器任务,则当浏览器下次调到前台时会显示它,而当电子邮件任务再次调到前台时则不会显示它。

活动的关联性由taskAffinity属性定义。任务的关联性是通过读取其根活动的关联性来确定的。因此,根据定义,根活动始终位于具有相同关联性的任务中。由于具有"singleTask""singleInstance"启动模式的活动只能位于任务的根目录,因此重新关联仅限于"standard""singleTop"模式。(另请参见launchMode属性。)

android:alwaysRetainTaskState
系统是否始终保持活动所在的的任务状态。"true"表示保持,"false"表示系统可以在某些情况下将任务重置为其初始状态。默认值为"false"。此属性仅对任务的根活动有意义。对于所有其他活动,它都会被忽略。

通常,系统会在某些情况下清除任务,删除根活动上方堆栈中的所有活动,例如当用户从主屏幕重新选择该任务时。通常,如果用户在一段时间(例如 30 分钟)内未访问该任务,则会执行此操作。

但是,当此属性为"true"时,无论用户如何到达该任务,用户始终会返回到该任务的最后状态。这在网络浏览器等应用程序中非常有用,因为这些应用程序有很多状态(例如多个打开的标签页),用户不希望丢失这些状态。

android:autoRemoveFromRecents
使用此属性的活动启动的任务是否保留在最近使用的屏幕中,直到任务中的最后一个活动完成。如果为true,则会自动从最近使用的屏幕中删除该任务。这会覆盖调用者对FLAG_ACTIVITY_RETAIN_IN_RECENTS的使用。它必须是布尔值,即"true""false"
android:banner
一个可绘制资源,为其关联的项目提供扩展的图形横幅。与<activity>标签一起使用,为特定活动提供默认横幅;与<application>标签一起使用,为所有应用程序活动提供横幅。

系统使用横幅在 Android TV 主屏幕上表示应用。由于横幅仅显示在主屏幕上,因此只有处理CATEGORY_LEANBACK_LAUNCHER意图的活动的应用程序才会指定它。

此属性设置为对包含图像的可绘制资源的引用,例如 "@drawable/banner"。没有默认横幅。

更多信息,请参见《TV 应用入门》中的 提供主屏幕横幅

android:canDisplayOnRemoteDevices

指示活动是否可以在远程设备上显示,该远程设备可能运行也可能不运行 Android。它必须是一个布尔值,要么是 "true",要么是 "false"

此属性的默认值为 "true"

android:clearTaskOnLaunch
当从主屏幕重新启动活动时,是否从任务中删除所有活动(根活动除外)。如果任务始终简化为其根活动,则为 "true";否则为 "false"。默认值为 "false"。此属性仅对启动新任务的活动(根活动)有意义。对于任务中的所有其他活动,它都会被忽略。

当值为 "true" 时,每次用户启动任务时,无论他们上次在任务中做什么,以及无论他们是否使用“返回”或“主页”按钮离开任务,他们都会被带到其根活动。当值为 "false" 时,任务在某些情况下可以清除活动,但不总是如此。有关更多信息,请参见 alwaysRetainTaskState 属性。

假设用户从主屏幕启动活动 P,然后从那里转到活动 Q。用户接下来点击“主页”,然后返回活动 P。通常,用户会看到活动 Q,因为那是他们在 P 的任务中最后执行的操作。但是,如果 P 将此标志设置为 "true",则当用户从主屏幕启动活动 P 时,其上方的所有活动(在本例中为 Q)都将被删除。因此,用户在返回任务时只会看到 P。

如果此属性和 allowTaskReparenting 都为 "true",则任何可以重新设置父级的活动都将移动到它们与其共享关联的任务。然后,其余活动将被删除。

如果未设置 FLAG_ACTIVITY_RESET_TASK_IF_NEEDED,则会忽略此属性。

android:colorMode

指定活动的色彩模式。如果指定,可以是 hdrwideColorGamut

如果为 hdr,则请求如果设备支持,则以高动态范围显示活动。

如果为 wideColorGamut,则请求在兼容设备上以宽色域模式显示活动。在宽色域模式下,窗口可以在 SRGB 色域之外进行渲染,以显示更鲜艳的色彩。如果设备不支持宽色域渲染,则此属性无效。有关以宽色域模式渲染的更多信息,请参见使用宽色域内容增强图形

android:configChanges
列出活动自行处理的配置更改。默认情况下,在运行时发生配置更改时,活动将关闭并重新启动,但使用此属性声明配置可以防止活动重新启动。相反,活动将保持运行状态,并调用其 onConfigurationChanged() 方法。

注意:仅在特殊情况下使用此属性来提高应用程序的性能和响应速度。有关更多信息,请参见处理配置更改

以下字符串是此属性的有效值。多个值由 | 分隔,例如 "locale|navigation|orientation"

描述
"colorMode"

屏幕的色彩模式功能(色域或动态范围)已更改。

注意:活动使用 colorMode 属性或在运行时请求的色彩模式不同于不同色彩模式的功能。活动更改其使用的色彩模式不会导致配置更改,因为显示器的色彩功能没有更改。

"density"

显示密度发生更改,例如当用户指定不同的显示比例或不同的显示器现在处于活动状态时。

在 API 级别 24 中添加.

"fontScale" 字体缩放系数发生更改,例如当用户选择新的全局字体大小时。
"fontWeightAdjustment" 字体粗细增加量已更改。
"grammaticalGender" 语言的语法性别已更改。请参见 GrammaticalInflectionManager

在 API 级别 34 中添加.

"keyboard" 键盘类型发生更改,例如当用户插入外部键盘时。
"keyboardHidden" 键盘辅助功能发生更改,例如当用户显示硬件键盘时。
"layoutDirection"

布局方向发生更改,例如从左到右 (LTR) 变为从右到左 (RTL)。

在 API 级别 17 中添加.

"locale" 区域设置发生更改,例如当用户选择显示文本的新语言时。
"mcc" 检测到更新 MCC 的 SIM 卡时,IMSI 移动国家代码 (MCC) 发生更改。
"mnc" 检测到更新 MNC 的 SIM 卡时,IMSI 移动网络代码 (MNC) 发生更改。
"navigation" 导航类型(轨迹球或方向键)发生更改。通常不会发生这种情况。
"orientation"

屏幕方向发生更改,例如当用户旋转设备时。

注意:如果您的应用程序面向 Android 3.2(API 级别 13)或更高版本,还应声明 "screenLayout""screenSize" 配置,因为当设备在纵向和横向之间切换时,屏幕布局和屏幕尺寸可能会发生变化。

"screenLayout" 屏幕布局发生更改,例如当不同的显示器变为活动状态时。
"screenSize"

当前可用屏幕尺寸发生更改。

这表示相对于当前纵横比的当前可用尺寸的更改,因此当用户在横向和纵向之间切换时,它会发生更改。

在 API 级别 13 中添加.

"smallestScreenSize"

物理屏幕尺寸发生更改。

这表示无论方向如何,尺寸都会发生变化,因此只有当实际物理屏幕尺寸发生变化时(例如切换到外部显示器)才会发生变化。此配置的更改对应于 smallestWidth 配置 的更改。

在 API 级别 13 中添加.

"touchscreen" 触摸屏发生更改。通常不会发生这种情况。
"uiMode" 用户界面模式发生更改,例如当用户将设备放置在桌面上或汽车底座上,或夜间模式发生更改时。有关不同 UI 模式的更多信息,请参见 UiModeManager

在 API 级别 8 中添加.

所有这些配置更改都会影响应用程序看到的资源值。因此,当调用 onConfigurationChanged() 时,通常需要再次检索所有资源(包括视图布局和可绘制对象),以正确处理更改。

注意:要处理与多窗口相关的配置更改,请同时使用 "screenLayout""smallestScreenSize"。Android 7.0(API 级别 24)或更高版本支持多窗口。

android:directBootAware

活动是否支持直接启动——也就是说,它是否可以在用户解锁设备之前运行。

注意:直接启动期间,应用程序中的活动只能访问存储在设备保护存储中的数据。

默认值为 "false"

android:documentLaunchMode
指定每次启动活动时如何将活动的新实例添加到任务中。此属性允许用户在最近使用的屏幕中显示来自同一应用程序的多个文档。

此属性有四个值,当用户使用应用程序打开文档时,会产生以下效果

描述
"intoExisting" 系统搜索其基本意图的 ComponentName 和数据 URI 与启动意图匹配的任务。如果系统找到这样的任务,系统将清除任务并重新启动,根活动将收到对 onNewIntent(android.content.Intent) 的调用。如果系统找不到这样的任务,则系统会创建一个新任务。
"always" 即使文档已打开,活动也会为文档创建一个新任务。这与同时设置 FLAG_ACTIVITY_NEW_DOCUMENTFLAG_ACTIVITY_MULTIPLE_TASK 标志相同。
"none" 活动不会为活动创建新任务。这是默认值,只有在设置 FLAG_ACTIVITY_NEW_TASK 时才会创建新任务。“最近使用的屏幕”以默认方式处理活动:它为应用显示单个任务,该任务从用户最后调用的任何活动恢复。
"never" 即使 Intent 包含FLAG_ACTIVITY_NEW_DOCUMENT,活动也不会启动到新的文档中。设置此标志会覆盖FLAG_ACTIVITY_NEW_DOCUMENTFLAG_ACTIVITY_MULTIPLE_TASK标志的行为(如果活动中设置了这两个标志中的任何一个),近期应用屏幕会显示应用程序的单个任务,该任务从用户上次调用的活动恢复。

注意:对于"none""never"以外的值,活动使用launchMode="standard"定义。如果未指定此属性,则使用documentLaunchMode="none"

android:enabled
系统是否可以实例化活动。如果可以,则为"true";如果不可以,则为"false"。默认值为"true"

<application>元素具有其自身的enabled属性,该属性应用于所有应用程序组件,包括活动。<application><activity>属性都必须为"true"(默认情况下两者都是如此),系统才能实例化活动。如果任何一个为"false",则无法实例化它。

android:enableOnBackInvokedCallback
此标志允许您在活动级别选择预测系统动画。此行为使大型多活动应用程序迁移到预测式返回手势更易于管理。

设置android:enableOnBackInvokedCallback=false会在活动级别或应用程序级别关闭预测式返回动画(取决于您设置标签的位置),并指示系统忽略对OnBackInvokedCallback平台 API 的调用。

android:excludeFromRecents

此活动启动的任务是否从近期应用屏幕中排除。也就是说,当此活动是新任务的根活动时,此属性决定该任务是否显示在近期应用列表中。如果任务从列表中排除,则为"true";如果包含,则为"false"。默认值为"false"

android:exported

其他应用程序的组件是否可以启动此活动。

  • 如果为"true",则任何应用程序都可以访问该活动,并且可以通过其确切的类名启动。
  • 如果为"false",则只能由同一应用程序的组件、具有相同用户 ID 的应用程序或特权系统组件启动该活动。当没有意图过滤器时,这是默认值。

如果应用程序中的活动包含意图过滤器,请将此元素设置为"true",以允许其他应用程序启动它。例如,如果活动是应用程序的主活动,并且包含category android.intent.category.LAUNCHER

如果此元素设置为"false",并且应用程序尝试启动该活动,则系统会抛出ActivityNotFoundException

此属性不是限制活动对其他应用程序的暴露的唯一方法。权限也用于限制可以调用该活动的外部实体。请参阅permission属性。

android:finishOnTaskLaunch
当用户通过选择主屏幕上的任务重新启动其任务时,是否会关闭活动的现有实例(根活动除外)。如果关闭,则为"true";如果未关闭,则为"false"。默认值为"false"

如果此属性和allowTaskReparenting都为"true",则此属性优先于另一个属性。活动的关联性将被忽略。活动不会重新设置父级,而是被销毁。

如果未设置 FLAG_ACTIVITY_RESET_TASK_IF_NEEDED,则会忽略此属性。

android:hardwareAccelerated
此活动是否启用了硬件加速渲染。如果启用,则为"true";如果未启用,则为"false"。默认值为"false"

在 Android 3.0 及更高版本上,应用程序可以使用硬件加速的 OpenGL 渲染器来提高许多常用 2D 图形操作的性能。启用硬件加速渲染器后,Canvas、Paint、Xfermode、ColorFilter、Shader 和 Camera 中的大多数操作都会加速。

这会导致动画更流畅、滚动更流畅,并且整体响应速度得到提高,即使对于没有明确使用框架的 OpenGL 库的应用程序也是如此。由于启用硬件加速需要更多资源,因此您的应用程序会消耗更多 RAM。

并非所有 OpenGL 2D 操作都已加速。如果启用硬件加速渲染器,请测试您的应用程序是否可以在没有错误的情况下使用渲染器。

android:icon

表示活动的图标。当需要在屏幕上显示活动的表示形式时,会向用户显示该图标。例如,启动任务的活动的图标会显示在启动器窗口中。图标通常与标签一起显示;有关标签的信息,请参阅android:label属性。

此属性设置为对包含图像定义的可绘制资源的引用。如果未设置此属性,则使用为整个应用程序指定的图标。有关更多信息,请参阅<application>元素的icon属性。

活动的图标(无论是在此处设置还是由<application>元素设置)也是所有活动意图过滤器的默认图标。有关更多信息,请参阅<intent-filter>元素的icon属性。

android:immersive
设置当前活动的沉浸式模式设置。如果为"true",则ActivityInfo.flags成员始终设置其FLAG_IMMERSIVE位,即使使用setImmersive()方法在运行时更改沉浸式模式。
android:label

活动的易于用户理解的标签。当向用户显示活动的表示形式时,标签会显示在屏幕上。它通常与活动图标一起显示。如果未设置此属性,则使用为整个应用程序设置的标签。请参阅<application>元素的label属性。

活动的标签(无论是在此处设置还是由<application>元素设置)也是所有活动意图过滤器的默认标签。有关更多信息,请参阅<intent-filter>元素的label属性。

标签设置为对字符串资源的引用,以便可以像用户界面中的其他字符串一样对其进行本地化。但是,为了方便您在开发应用程序时使用,它也可以设置为原始字符串。

android:launchMode

关于活动如何启动的指令。共有五种模式,它们与Intent对象中的活动标志(FLAG_ACTIVITY_* 常量)一起工作,以确定当调用活动处理意图时会发生什么。

"standard"
"singleTop"
"singleTask"
"singleInstance"
"singleInstancePerTask"

默认模式为"standard"

如以下表格所示,这些模式分为两大组,一组是"standard""singleTop"活动,另一组是"singleTask""singleInstance""singleInstancePerTask"活动。"standard""singleTop"启动模式的活动可以多次实例化。

这些实例可以属于任何任务,并且可以位于活动任务中的任何位置。通常情况下,它们会启动到调用startActivity()的任务中,除非Intent对象包含FLAG_ACTIVITY_NEW_TASK指令,在这种情况下,会选择不同的任务。有关更多信息,请参阅taskAffinity属性。

相反,"singleTask""singleInstance""singleInstancePerTask"活动的 behaviour 不同。"singleInstancePerTask"始终位于活动任务的根目录。此外,设备一次只能保存一个"singleInstance"活动的实例,而当设置FLAG_ACTIVITY_MULTIPLE_TASKFLAG_ACTIVITY_NEW_DOCUMENT时,"singleInstancePerTask"活动可以在不同的任务中多次实例化。

具有"singleTask"启动模式的活动结合了"singleInstance""singleInstancePerTask"的行为:活动可以多次实例化,并且可以位于具有相同taskAffinity的任务中的任何位置。但是,设备只能保存一个任务来定位位于活动任务根目录的"singleTask"活动。

"standard""singleTop"模式彼此之间只有一个不同点:每次"standard"活动有一个新的意图时,都会创建一个新的类实例来响应该意图。每个实例处理一个意图。同样,也可以创建一个新的"singleTop"活动实例来处理新的意图。

但是,如果目标任务的堆栈顶部已经存在该活动的实例,则该实例将通过 onNewIntent() 调用接收新的 Intent。不会创建新的实例。否则——如果目标任务中存在 "singleTop" 活动的实例,但不在堆栈顶部,或者它位于堆栈顶部,但不在目标任务中——则会创建一个新实例并将其推入堆栈。

类似地,如果用户向上导航到当前堆栈上的活动,则行为由父活动的启动模式决定。如果父活动具有启动模式 singleTop(或 up Intent 包含 FLAG_ACTIVITY_CLEAR_TOP),则父活动将被置于堆栈顶部,并保留其状态。

导航 Intent 将由父活动的 onNewIntent() 方法接收。如果父活动具有启动模式 standard,并且 up Intent 不包含 FLAG_ACTIVITY_CLEAR_TOP,则当前活动及其父活动都将从堆栈中弹出,并将创建一个父活动的新实例来接收导航 Intent。

"singleInstance" 模式与 "singleTask""singleInstancePerTask" 的唯一区别在于:具有 "singleTask""singleInstancePerTask" 启动模式的活动允许其他活动(必然是 "standard""singleTop" 活动)成为其任务的一部分。

另一方面,"singleInstance" 活动不允许其他活动成为其任务的一部分。它必须是任务中唯一的活动。如果它启动另一个活动,则该活动将被分配给不同的任务,就像 Intent 中包含 FLAG_ACTIVITY_NEW_TASK 一样。

用例 启动模式 多个实例? 注释
大多数活动的常规启动 "standard" 默认值。系统始终在目标任务中创建活动的新实例,并将 Intent 传递给它。
"singleTop" 有条件地 如果目标任务顶部已存在该活动的实例,则系统将通过调用其 onNewIntent() 方法将 Intent 传递给该实例,而不是创建活动的新实例。
专用启动
(不推荐用于一般用途)
"singleTask" 有条件地 系统在新任务的根目录中创建活动,或在具有相同关联性的现有任务中查找活动。如果活动实例已存在并且位于任务的根目录,则系统会通过调用其 onNewIntent() 方法将 Intent 传递给现有实例,而不是创建一个新的实例。
"singleInstance" "singleTask" 相同,只是系统不会将任何其他活动启动到持有该实例的任务中。该活动始终是其任务中唯一且唯一的成员。
"singleInstancePerTask" 有条件地 该活动只能作为任务的根活动运行,即创建该任务的第一个活动,因此任务中只有一个该活动的实例。但是,可以在不同的任务中多次实例化该活动。

如上表所示,"standard" 是默认模式,适用于大多数类型的活动。"singleTop" 也是许多类型的活动的一种常用且有用的启动模式。其他模式 "singleTask""singleInstance""singleInstancePerTask" *不适用于* 大多数应用程序。它们会导致与用户不熟悉的交互模型,并且与大多数其他应用程序大相径庭。

无论您选择哪种启动模式,请务必测试在启动期间以及使用“后退”按钮从其他活动和任务导航回活动时的可用性。

有关启动模式及其与 Intent 标志交互的更多信息,请参阅 任务和后退堆栈

android:lockTaskMode
确定设备在 锁定任务模式 下运行时系统如何呈现此活动。

Android 可以以沉浸式、类似信息亭的方式运行任务,称为锁定任务模式。当系统在锁定任务模式下运行时,设备用户通常无法查看通知、访问未列入允许列表的应用或返回主屏幕,除非主屏幕应用已列入允许列表。

只有设备策略控制器 (DPC) 允许列入允许列表的应用才能在系统处于锁定任务模式时运行。但是,系统和 特权应用 可以无需列入允许列表即可在锁定任务模式下运行。

该值可以是以下任何一个 R.attr.lockTaskMode 字符串值

描述
"normal" 默认值。这是默认值。任务不会以锁定任务模式启动,但可以通过调用 startLockTask() 将其置于锁定任务模式。
"never"

任务不会以 lockTask 模式启动,并且设备用户无法从“最近”屏幕固定这些任务。

注意:此模式仅适用于系统和特权应用程序。具有此值的非特权应用将被视为 normal

"if_whitelisted" 如果 DPC 使用 DevicePolicyManager.setLockTaskPackages() 授权此包,则此模式与 always 相同,只是如果活动是最后一个锁定任务,则需要在能够完成之前调用 stopLockTask()。如果 DPC 未授权此包,则此模式与 normal 相同。
"always"

以该活动为根的任务始终以锁定任务模式启动。如果在启动此任务时系统已处于锁定任务模式,则新任务将在当前任务之上启动。以这种模式启动的任务可以通过调用 finish() 退出锁定任务模式。

注意:此模式仅适用于系统和特权应用程序。具有此值的非特权应用将被视为 normal

此属性在 API 级别 23 中引入。

android:maxRecents
“最近”屏幕 中以该活动为根的任务的最大数量。达到此条目数时,系统将从“最近”屏幕中删除使用最少的实例。有效值是 1 到 50 的整数,或在低内存设备上是 1 到 25 的整数。零无效。默认值为 16。
android:maxAspectRatio

活动支持的最大纵横比。如果应用在具有更宽纵横比的设备上运行,则系统会自动为应用添加黑边,留下部分屏幕未被使用,以便应用可以以其指定的最大纵横比运行。

最大纵横比表示为设备较长尺寸除以较短尺寸的商的小数形式。例如,如果最大纵横比为 7:3,则将此属性的值设置为 2.33。

在非可穿戴设备上,此属性的值需要大于或等于 1.33。在可穿戴设备上,它必须大于或等于 1.0。否则,系统将忽略设置的值。

注意:如果活动将 resizeableActivity 设置为 true,则会忽略此属性,因为这意味着您的活动支持任何尺寸。

有关此属性的更多信息,请参阅 声明最大纵横比

android:multiprocess
活动实例是否可以启动到启动它的组件的进程中。如果可以,则为 "true";如果不可以,则为 "false"。默认值为 "false"

通常,活动的新实例将启动到定义它的应用程序的进程中,因此活动的所有实例都在同一个进程中运行。但是,如果此标志设置为 "true",则活动实例可以在多个进程中运行,从而允许系统在使用实例的任何位置创建实例,前提是权限允许它——这几乎从不需要或不需要。

android:name
实现活动的类的名称,它是 Activity 的子类。属性值通常是完全限定的类名,例如 "com.example.project.ExtracurricularActivity"。但是,作为简写,如果名称的第一个字符是句点,例如 ".ExtracurricularActivity",则它将附加到 build.gradle 文件中指定的 命名空间

发布应用程序后,请勿更改此名称,除非您将 android:exported="false"。没有默认值。必须指定名称。

android:noHistory
当用户从活动导航离开并且它不再在屏幕上可见时,是否通过调用其 finish() 方法将其从活动堆栈中移除并完成。如果已完成,则为 "true";如果未完成,则为 "false"。默认值为 "false"

"true" 值表示活动不会留下历史痕迹。它不会保留在任务的活动堆栈中,因此用户无法返回到它。在这种情况下,如果您从该活动启动另一个活动以获取结果,则永远不会调用 onActivityResult()

此属性在 API 级别 3 中引入。

android:parentActivityName
活动的逻辑父级的类名。此处的名称必须与提供给相应 <activity> 元素的 android:name 属性的类名匹配。

系统读取此属性以确定当用户点击操作栏中的“向上”按钮时要启动哪个活动。系统还可以使用此信息来使用 TaskStackBuilder 合成活动的回退堆栈。

要支持 API 级别 4-16,您还可以使用指定 "android.support.PARENT_ACTIVITY" 值的 <meta-data> 元素声明父活动。

<activity
    android:name="com.example.app.ChildActivity"
    android:label="@string/title_child_activity"
    android:parentActivityName="com.example.app.MainActivity" >
    <!-- Parent activity meta-data to support API level 4+ -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.app.MainActivity" />
</activity>

有关声明父活动以支持向上导航的更多信息,请阅读 提供向上导航

此属性在 API 级别 16 中引入。

android:persistableMode

定义活动实例如何在设备重启时在包含的任务中保留。

如果任务的根活动将此属性的值设置为persistRootOnly,则仅保留根活动。否则,将检查任务后退栈中较高的活动;这些活动中任何将此属性的值设置为persistAcrossReboots的活动都将被保留。

如果使用此属性,则必须将其值设置为以下值之一:

描述
persistRootOnly

默认值。系统重启时,活动任务将被保留,但仅使用根活动的启动 Intent。

当应用的启动 Intent 加载应用的根活动时,活动不会收到PersistableBundle对象。因此,不要使用onSaveInstanceState()来保留应用根活动在设备重启后的状态。

注意:此属性值仅当在应用的根活动上设置时才会影响应用的行为。

persistAcrossReboots

此活动的状态将被保留,以及后退栈中每个在其自己的persistableMode属性设置为persistAcrossReboots的较高活动的状态。如果某个活动没有设置为persistAcrossRebootspersistableMode属性,或者如果它是使用Intent.FLAG_ACTIVITY_NEW_DOCUMENT标志启动的,则该活动以及后退栈中所有较高的活动都不会被保留。

当 Intent 加载其persistableMode属性在应用中设置为persistAcrossReboots的活动时,该活动会在其onCreate()方法中收到PersistableBundle对象。因此,只要其persistableMode属性设置为persistAcrossReboots,就可以使用onSaveInstanceState()来保留活动在设备重启后的状态。

注意:即使此属性值设置在应用根活动以外的活动上,它也会影响应用的行为。

persistNever

活动的状态不会被保留。

注意:此属性值仅当在应用的根活动上设置时才会影响应用的行为。

此属性是在 API 级别 21 中引入的。

android:permission
客户端必须拥有才能启动活动或以其他方式使其响应 Intent 的权限的名称。如果startActivity()startActivityForResult()的调用者未授予指定的权限,则其 Intent 不会传递给活动。

如果未设置此属性,则<application>元素的permission属性设置的权限将应用于活动。如果两个属性均未设置,则活动不受权限保护。

有关权限的更多信息,请参阅应用清单概述的权限部分和安全提示

android:process

活动运行的进程的名称。通常,应用程序的所有组件都在为应用程序创建的默认进程名称中运行,并且不需要使用此属性。但是,如有必要,可以使用此属性覆盖默认进程名称,从而允许您将应用组件分布到多个进程中。

如果分配给此属性的名称以冒号 (:) 开头,则在需要时将创建一个专属于应用程序的新进程,并且活动将在该进程中运行。

如果进程名称以小写字符开头,则活动将在该名称的全局进程中运行,前提是它有权这样做。这允许不同应用程序中的组件共享一个进程,从而减少资源使用。

<application>元素的process属性可以为所有组件设置不同的默认进程名称。

android:relinquishTaskIdentity

活动是否将其任务标识符放弃给任务堆栈中高于它的活动。根活动具有此属性设置为"true"的任务将基本Intent替换为任务中下一个活动的基本Intent

如果下一个活动也具有此属性设置为"true",则它会将其基本Intent交给在同一任务中启动的任何活动。这将对每个活动继续进行,直到遇到此属性设置为"false"的活动为止。默认值为"false"

此属性设置为"true"也允许活动使用ActivityManager.TaskDescription来更改最近使用的应用屏幕中的标签、颜色和图标。

android:requireContentUriPermissionFromCaller

指定传递内容 URI 时启动此活动所需的权限。默认值为none,这意味着不需要任何特定权限。设置此属性会根据调用者的权限限制活动调用。如果调用者没有所需的权限,则活动启动将通过 SecurityException 被拒绝。

请注意,此强制执行适用于Intent.getData()Intent.EXTRA_STREAMIntent.getClipData()中的内容 URI。

可以是字符串值,使用 '\\;' 转义字符,例如 '\\n' 或 '\\uxxxx'(表示 Unicode 字符);

必须是以下常量值之一。

常量 描述
none 0 默认值,不需要任何特定权限。
read 1 强制调用者对传递的内容 URI 具有读取访问权限。
readAndWrite 4 强制调用者对传递的内容 URI 具有读取和写入访问权限。
readOrWrite 3 强制调用者对传递的内容 URI 具有读取或写入访问权限。
write 2 强制调用者对传递的内容 URI 具有写入访问权限。
android:resizeableActivity

指定应用是否支持多窗口模式。可以在<activity><application>元素中设置此属性。

如果将此属性设置为"true",则用户可以在分屏和自由形式模式下启动活动。如果将属性设置为"false",则无法测试或优化应用以适应多窗口环境。系统仍然可以将活动置于多窗口模式,并应用兼容性模式。

将此属性设置为"false"并不能保证屏幕上没有其他应用处于多窗口模式可见,例如画中画或其他显示器。因此,设置此标志并不意味着您的应用拥有独占的资源访问权限。

如果您的应用的目标 API 级别为 24 或更高,并且您未为此属性指定值,则该属性的值默认为"true"

如果您的应用的目标 API 级别为 31 或更高,则此属性在小型和大型屏幕上的工作方式有所不同。

  • 大型屏幕 (sw >= 600dp):所有应用都支持多窗口模式。该属性指示应用是否可以调整大小,而不是应用是否支持多窗口模式。如果resizeableActivity="false",则在必要时将应用置于兼容性模式以符合显示尺寸。
  • 小型屏幕 (sw < 600dp):如果resizeableActivity="true"并且活动的最小宽度和最小高度符合多窗口要求,则应用支持多窗口模式。如果resizeableActivity="false",则无论活动的最小宽度和高度如何,应用都不支持多窗口模式。

注意:设备制造商可以覆盖 API 级别 31 的行为。

此属性是在 API 级别 24 中添加的。

注意:任务的根活动值将应用于在任务中启动的所有其他活动。也就是说,如果任务的根活动可调整大小,则系统将所有任务中的其他活动视为可调整大小的。如果根活动不可调整大小,则任务中的其他活动也不可调整大小。

android:screenOrientation

活动请求的方向。

当活动填充整个屏幕时,请求的方向充当建议,用于更改该屏幕上的方向以匹配请求的值。这可能导致方向与屏幕在空间中的物理方向不同,要求用户旋转设备以继续使用应用程序。在Android 12(API 级别 31)及更高版本中,设备制造商可以配置单个设备屏幕(例如可折叠设备的平板大小屏幕)以忽略此建议,而是强制活动在用户首选的设备方向内以 letterbox 方式显示。这使得活动的方向与请求的方向匹配,而无需用户物理旋转设备。

在多窗口模式下,请求的方向不会充当整体方向的建议。如果活动以 letterbox 方式显示,则请求的方向会影响应用于活动的 letterbox。

该值可以是以下字符串中的任何一个

"unspecified" 默认值。系统选择方向。它使用的策略,以及因此在特定情况下做出的选择,可能因设备而异。
"behind" 与活动堆栈中紧邻其下方的活动相同的方向。
"landscape" 横向方向(显示屏宽度大于高度)。
"portrait" 纵向方向(显示屏高度大于宽度)。
"reverseLandscape" 与正常横向方向相反的横向方向。API 级别 9 中添加。
"reversePortrait" 与正常纵向方向相反的纵向方向。API 级别 9 中添加。
"sensorLandscape" 横向方向,但可以根据设备传感器是正常横向还是反向横向。即使用户锁定了基于传感器的旋转,也会使用传感器。API 级别 9 中添加。
"sensorPortrait" 纵向方向,但可以根据设备传感器是正常纵向还是反向纵向。即使用户锁定了基于传感器的旋转,也会使用传感器。但是,根据设备配置,可能不允许倒置旋转。API 级别 9 中添加。
"userLandscape" 横向方向,但可以根据设备传感器和用户的偏好是正常横向还是反向横向。API 级别 18 中添加。
"userPortrait" 纵向方向,但可以根据设备传感器和用户的偏好是正常纵向还是反向纵向。但是,根据设备配置,可能不允许倒置旋转。API 级别 18 中添加。
"sensor" 设备方向传感器决定方向。显示屏的方向取决于用户如何握持设备。当用户旋转设备时,它会发生变化。但是,默认情况下,某些设备不会旋转到所有四个可能的方位。要使用所有四个方位,请使用"fullSensor"。即使用户锁定了基于传感器的旋转,也会使用传感器。
"fullSensor" 设备方向传感器决定四个方向中的任何一个的方向。这类似于"sensor",只是它允许任何四个可能的屏幕方向,而不管设备通常支持什么。例如,某些设备通常不使用反向纵向或反向横向,但这会启用这些方向。API 级别 9 中添加。
"nosensor" 方向的确定不依赖于物理方向传感器。传感器被忽略,因此显示屏不会根据用户移动设备的方式旋转。
"user" 用户当前的首选方向。
"fullUser" 如果用户锁定了基于传感器的旋转,则其行为与user相同,否则其行为与fullSensor相同,并允许任何四个可能的屏幕方向。API 级别 18 中添加。
"locked" 将方向锁定到其当前旋转,无论是什么。API 级别 18 中添加。

注意:声明横向或纵向值之一时,它被认为是活动运行方向的硬性要求。您声明的值可通过 Google Play 等服务进行筛选,因此您的应用程序仅适用于支持活动所需方向的设备。例如,如果您声明"landscape""reverseLandscape""sensorLandscape",则您的应用程序仅适用于支持横向方向的设备。

还使用<uses-feature>元素显式声明您的应用程序需要纵向或横向方向,例如<uses-feature android:name="android.hardware.screen.portrait"/>。这是 Google Play 和其他支持它的服务提供的筛选行为,平台本身并不控制当设备仅支持某些方向时您的应用是否可以安装。

android:showForAllUsers

当设备的当前用户与启动活动的用户的不同时,是否显示活动。您可以将此属性设置为字面值,例如"true""false",或者您可以将属性设置为包含布尔值的资源或主题属性。

此属性在 API 级别 23 中添加。

android:stateNotNeeded
活动是否可以在不保存其状态的情况下终止并成功重新启动。如果它可以在不参考其先前状态的情况下重新启动,则为"true";如果需要其先前状态,则为"false"。默认值为"false"

通常,在暂时关闭活动以节省资源之前,会调用其onSaveInstanceState()方法。此方法将活动当前状态存储在Bundle对象中,然后在重新启动活动时将其传递给onCreate()。如果此属性设置为"true",则可能不会调用onSaveInstanceState(),并且onCreate()传递null而不是Bundle,就像活动首次启动时一样。

"true"设置意味着活动可以在没有保留状态的情况下重新启动。例如,显示主屏幕的活动使用此设置来确保如果由于某种原因崩溃,它不会被删除。

android:supportsPictureInPicture

指定活动是否支持画中画显示。

android:taskAffinity

活动与其具有关联的任务。从用户的角度来看,具有相同关联的活动在概念上属于同一任务,属于同一“应用程序”。任务的关联由其根活动的关联确定。

关联决定两件事:活动重新指定父级所属的任务(参见allowTaskReparenting属性)以及当活动使用FLAG_ACTIVITY_NEW_TASK标志启动时容纳该活动的任务。

默认情况下,应用程序中的所有活动都具有相同的关联。您可以设置此属性以对它们进行不同的分组,甚至将定义在不同应用程序中的活动放置在同一任务中。要指定活动与任何任务都没有关联,请将其设置为空字符串。

如果未设置此属性,则活动将继承为应用程序设置的关联。请参见<application>元素的taskAffinity属性。应用程序的默认关联名称是在build.gradle文件中设置的命名空间

android:theme
对定义活动整体主题的样式资源的引用。这会自动设置活动的上下文以使用此theme,并且还可能在启动活动之前导致“启动”动画,以更好地匹配活动的外观。

如果未设置此属性,则活动将继承从<application>元素的theme属性继承的整个应用程序的主题。如果该属性也没有设置,则使用默认系统主题。有关更多信息,请参阅样式和主题

android:uiOptions

活动UI的额外选项。必须是以下值之一。

描述
"none"没有额外的UI选项。这是默认值。
"splitActionBarWhenNarrow"当受到水平空间限制时(例如,在手机的纵向模式下),在屏幕底部添加一个栏以显示应用栏(也称为操作栏)中的操作项。应用栏不会在屏幕顶部显示少量操作项,而是将其拆分为顶部的导航部分和底部的操作项栏。这意味着不仅为操作项提供了合理的可用空间,而且还为顶部的导航和标题元素提供了合理的可用空间。菜单项不会拆分到两个栏中。它们总是同时出现。

有关应用栏的更多信息,请参阅添加应用栏

此属性在 API 级别 14 中添加。

android:windowSoftInputMode
活动的窗口如何与包含屏幕软键盘的窗口交互。此属性的设置会影响两件事
  • 活动成为用户关注焦点时,软键盘是隐藏还是可见。
  • 活动主窗口的大小是否会减小以腾出空间放置软键盘,或者当窗口的一部分被软键盘覆盖时,其内容是否会平移以使当前焦点可见。

该设置必须是下表中列出的值之一,或一个"state..."值加上一个"adjust..."值的组合。在任一组中设置多个值,例如多个"state..."值,结果未定义。各个值由竖线(|)分隔,如下例所示

<activity android:windowSoftInputMode="stateVisible|adjustResize" ... >

此处设置的值(除了"stateUnspecified""adjustUnspecified")会覆盖主题中设置的值。

描述
"stateUnspecified" 软键盘是隐藏还是可见未指定。系统会选择合适的狀態或依赖主题中的设置。

这是软键盘行为的默认设置。

"stateUnchanged" 软键盘保持其上次的状态(可见或隐藏),当活动回到前台时。
"stateHidden" 当用户选择该活动时,软键盘会隐藏——也就是说,当用户主动导航到该活动时,而不是从其他活动返回时。
"stateAlwaysHidden" 当活动的窗口获得输入焦点时,软键盘始终隐藏。
"stateVisible" 当用户选择该活动时,软键盘会显示——也就是说,当用户主动导航到该活动时,而不是从其他活动返回时。
"stateAlwaysVisible" 当窗口收到输入焦点时,软键盘可见。
"adjustUnspecified" 活动的窗口是否调整大小以腾出空间给软键盘,或者窗口的内容是否平移以使当前焦点在屏幕上可见,这未作指定。系统会根据窗口内容是否有任何可以滚动其内容的布局视图来自动选择其中一种模式。如果存在这样的视图,则窗口会调整大小,假设滚动可以使窗口的所有内容在较小的区域内可见。

这是主窗口行为的默认设置。

"adjustResize" 活动的窗口始终调整大小以在屏幕上为软键盘腾出空间。
"adjustPan" 活动的窗口不会调整大小以腾出空间给软键盘。相反,窗口的内容会自动平移,以便当前焦点永远不会被键盘遮挡,用户始终可以看到他们正在输入的内容。这通常不如调整大小理想,因为用户可能需要关闭软键盘才能访问和交互被遮挡的窗口部分。

此属性在 API 级别 3 中引入。

引入于
API 级别 1(所有属性,除了noHistorywindowSoftInputMode,它们是在 API 级别 3 中添加的)。
另请参见
<application>
<activity-alias>