最近得空,再回顾一下android api文档,其中有些地方自己做了总结,如想看api的,链接在此:https://developer.android.google.cn/guide/topics/manifest/activity-element.html#reparent

alwaysRetainTaskState

声明在根activity(也就是启动项的activity有效),其余无效。看默认false。应用切换后,如果30分钟后再打开,将不保存之前的最终信息。设置为true时,则一直保存。

autoRemoveFromRecents

声明都有效。如果为true,则由此activity启动以及后续启动的activity 将不保存在最近使用的任务栏中。

clearTaskOnLaunch

声明在根activity(也就是启动项的activity有效)。默认为false。如果为true,那么应用通过主页面图标再次启动应用,只会保留任务栈底部的activity,并且显示,其余全部销毁,底部activity可以不是启动项的activity

configChanges

在运行时发生配置更改时,默认情况下会关闭 Activity 然后将其重新启动,但使用该属性声明配置将阻止 Activity 重新启动。 Activity 反而会保持运行状态,并且系统会调用其 onConfigurationChanged() 方法。
配置列表如下:
- “mcc” IMSI 移动国家/地区代码 (MCC) 发生了变化 - 检测到了 SIM 并更新了 MCC。
- “mnc” IMSI 移动网络代码 (MNC) 发生了变化 - 检测到了 SIM 并更新了 MNC。
- “locale” 语言区域发生了变化 — 用户为文本选择了新的显示语言。
- “touchscreen” 触摸屏发生了变化。(这种情况通常永远不会发生。)
- “keyboard” 键盘类型发生了变化 — 例如,用户插入了一个外置键盘。
- “keyboardHidden” 键盘无障碍功能发生了变化 — 例如,用户显示了硬件键盘。
- “navigation” 导航类型(轨迹球/方向键)发生了变化。(这种情况通常永远不会发生。)
- “screenLayout” 屏幕布局发生了变化 — 这可能是由激活了其他显示方式所致。
- “fontScale” 字体缩放系数发生了变化 — 用户选择了新的全局字号。
- “uiMode” 用户界面模式发生了变化 — 这可能是因用户将设备放入桌面/车载基座或夜间模式发生变化所致。 请参阅 UiModeManager。 此项为 API 级别 8 中新增配置。
- “orientation” 屏幕方向发生了变化 — 用户旋转了设备。 注:如果您的应用面向 API 级别 13 或更高级别(按照 minSdkVersion 和 targetSdkVersion 属性所声明的级别),则还应声明 “screenSize” 配置,因为当设备在横向与纵向之间切换时,该配置也会发生变化。
- “screenSize” 当前可用屏幕尺寸发生了变化。它表示当前可用尺寸相对于当前纵横比的变化,因此会在用户在横向与纵向之间切换时发生变化。 不过,如果您的应用面向 API 级别 12 或更低级别,则 Activity 始终会自行处理此配置变更(即便是在 Android 3.2 或更高版本的设备上运行,此配置变更也不会重新启动 Activity)。
- 此项为 API 级别 13 中新增配置。
- “smallestScreenSize” 物理屏幕尺寸发生了变化。它表示与方向无关的尺寸变化,因此只有在实际物理屏幕尺寸发生变化(如切换到外部显示器)时才会变化。 对此配置的变更对应于smallestWidth 配置的变化。 不过,如果您的应用面向 API 级别 12 或更低级别,则 Activity 始终会自行处理此配置变更(即便是在 Android 3.2 或更高版本的设备上运行,此配置变更也不会重新启动 Activity)。
- 此项为 API 级别 13 中新增配置。
- “layoutDirection” 布局方向发生了变化。例如,从从左至右 (LTR) 更改为从右至左 (RTL)。 此项为 API 级别 17 中新增配置。
常用的配置有如下locale,keyboard,keyboardHidden,screenLayout,fontScale,orientation

enabled

application和activity 中都可声明。默认true,表示activity 可实例化,也就是可用,false表示不可用,这个activity就不能启动了。

excludeFromRecents

声明在根activity(也就是启动项的activity有效),其余无效。如果为true,则该应用不会显示在最近使用的列表中。

exported

Activity 是否可由其他应用的组件启动 —“true”表示可以,“false”表示不可以。若为“false”,则 Activity 只能由同一应用的组件或使用同一用户 ID 的不同应用启动。
默认值取决于 Activity 是否包含 Intent 过滤器。没有任何过滤器意味着 Activity 只能通过指定其确切的类名称进行调用。 这意味着 Activity 专供应用内部使用(因为其他应用不知晓其类名称)。 因此,在这种情况下,默认值为“false”。另一方面,至少存在一个过滤器意味着 Activity 专供外部使用,因此默认值为“true”。
该属性并非限制 Activity 对其他应用开放度的唯一手段。 您还可以利用权限来限制哪些外部实体可以调用 Activity(请参阅 permission 属性)。

finishOnTaskLaunch

每当用户再次启动其任务(在主屏幕上选择任务)时,是否应关闭(完成)现有 Activity 实例
True 为关闭。只要声明的都会被关闭,除了任务栈底部的activity。

hardwareAccelerated

是否应为此 Activity 启用硬件加速渲染 —“true”表示应启用,“false”表示不应启用。 默认值为“false”。
从 Android 3.0 开始,为应用提供了硬件加速 OpenGL 渲染器,以改善许多常见 2D 图形运算的性能。 启用硬件加速渲染器时,Canvas、Paint、Xfermode、ColorFilter、Shader 和 Camera 中的大多数运算都会得到加速。这可以提高动画、滚动的流畅度和总体响应速度,即便是并不明确使用框架 OpenGL 库的应用也会受益。 由于启用硬件加速会增加资源消耗,因此您的应用将占用更多内存。

maxRecents

达到该条目数时,系统会从概览屏幕中移除最近最少使用的实例。 有效值为 1-50(低内存设备使用 25);0 为无效值。 该值必须是整数,例如 50。默认值为 16。只对启动的根有效

multiprocess

默认false。为true时可以在多个进程中创建实例。一个应用是一个进程。默认智能在自己app的进程中创建实例。更为广泛的是provider的声明,false 则多进程共享,ture,则有多个实例

noHistory

默认false。为true表示该activity 进入不可见时便会自动销毁,调用finish(),那也就意味着这种定义的activity不会执行onActivityResult()。

permission

自定义权限的方式,权限名称

process

如果为该属性分配的名称以冒号(“:”)开头,则会在需要时创建应用专用的新进程,并且 Activity 会在该进程中运行。如果进程名称以小写字符开头,Activity 将在该名称的全局进程中运行,前提是它拥有相应的权限。这可以让不同应用中的组件共享一个进程,从而减少资源占用。

supportsPictureInPicture

指定 Activity 是否支持画中画 显示。如果 android:resizeableActivity 是 false,系统会忽略该属性。
该属性是在 API 级别 24 添加的。

stateNotNeeded

默认false。为true,表示不保存状态重新启动,也就是不会执行onsaveInstanceState()。
“true”设置可确保 Activity 能够在未保留状态时重新启动。 例如,显示主屏幕的 Activity 可以使用该设置来确保其由于某种原因崩溃时不会被移除。

resizeableActivity

默认true。指定应用是否支持多窗口显示。您可以在 或 元素中设置该属性。
如果您将该属性设置为 true,则用户可以分屏和自由形状模式启动 Activity。 如果您将该属性设置为 false,Activity 将不支持多窗口模式。 如果该值为 false,且用户尝试在多窗口模式下启动 Activity,该 Activity 将全屏显示。

screenOrientation

Activity 在设备上的显示方向。如果 Activity 是在多窗口模式下运行,系统会忽略该属性。
其值可以是下列任一字符串:
“unspecified” 默认值。由系统选择方向。在不同设备上,系统使用的政策以及基于政策在特定上下文所做的选择可能有所差异。
“behind” 与 Activity 栈中紧接着它的 Activity 的方向相同。
“landscape” 横向方向(显示的宽度大于高度)。
“portrait” 纵向方向(显示的高度大于宽度)。
“reverseLandscape” 与正常横向方向相反的横向方向。API 级别 9 中的新增配置。
“reversePortrait” 与正常纵向方向相反的纵向方向。API 级别 9 中的新增配置。
“sensorLandscape” 横向方向,但根据设备传感器,可以是正常或反向的横向方向。API 级别 9 中的新增配置。
“sensorPortrait” 纵向方向,但根据设备传感器,可以是正常或反向的纵向方向。API 级别 9 中的新增配置。
“userLandscape” 横向方向,但根据设备传感器和用户的传感器首选项,可以是正常或反向的横向方向。 如果用户锁定了基于传感器的旋转,其行为与 landscape 相同,否则,其行为与 sensorLandscape 相同。API 级别 18 中的新增配置。
“userPortrait” 纵向方向,但根据设备传感器和用户的传感器首选项,可以是正常或反向的纵向方向。 如果用户锁定了基于传感器的旋转,其行为与 portrait 相同,否则,其行为与 sensorPortrait 相同。API 级别 18 中的新增配置。
“sensor” 方向由设备方向传感器决定。显示方向取决于用户如何手持设备,它会在用户旋转设备时发生变化。 但一些设备默认情况下不会旋转到所有四种可能的方向。要允许全部四种方向,请使用 “fullSensor”。
“fullSensor” 方向由 4 种方向中任一方向的设备方向传感器决定。这与 “sensor” 类似,不同的是它允许所有 4 种可能的屏幕方向,无论设备正常情况下采用什么方向(例如,一些设备正常情况下不使用反向纵向或反向横向,但它支持这些方向)。 API 级别 9 中的新增配置。
“nosensor” 决定方向时不考虑物理方向传感器。传感器会被忽略,因此显示不会随用户对设备的移动而旋转。 除了这个区别,系统在选择方向时使用的政策与“unspecified”设置相同。
“user” 用户当前的首选方向。
“fullUser” 如果用户锁定了基于传感器的旋转,其行为与 user 相同,否则,其行为与 fullSensor 相同,允许所有 4 种可能的屏幕方向。 API 级别 18 中的新增配置。
“locked” 将方向锁定在其当前的任意旋转方向。API 级别 18 中的新增配置。
注:如果您声明其中一个横向或纵向值,系统将其视为对 Activity 运行方向的硬性要求。 因此,您声明的值支持通过 Google Play 之类的服务进行过滤,这样就能将您的应用只提供给支持 Activity 所要求方向的设备。 例如,如果您声明了 “landscape”、”reverseLandscape” 或 “sensorLandscape”,则您的应用将只提供给支持横向方向的设备。 不过,您还应通过 元素明确声明,您的应用要求采用纵向或横向方向。 例如,。这纯粹是 Google Play(以及其他支持它的服务)提供的一种过滤行为,平台本身并不能控制当设备仅支持特定方向时您的应用能否安装。

launchmodle:其中有四种模式,standard,singleTop, singleTask,singleInstance。

standard

是标准模式,也是默认模式。这种模式activity,每次启动的时候都会产生一个activity的实例。

singletop

和standard模式很相似。但是如果当前的启动的Activity在当前的任务栈顶端已经存在的时候,不会生成新的activity实例,而是执行顶端activity的OnNewIntent()方法。这种效果和启动方式为FLAG_ACTIVITY_SINGLE_TOP的效果是一样的

singletask。

单任务启动模式,这种模式启动会启动在一个新的任务栈中,这里用到了另外一个属性“taskAffinity”关联性。这个属性决定当前activity将会处于那个任务栈中。默认是应用的包名,所以默认同一应用中的activity属于具有相同的关联性,也就是默认在同一个任务栈中。所以最然“singleTask”的任务是在单独的任务栈中,但是由于默认当前的任务栈是同app,所以默认生成的新的activity实例会在当前的任务栈中,但如果当前的任务栈已经存在了activity的实例,则将上面的所有Activity出栈,然后执行activity实例的onNewIntent()。如果我们想新生成的activity实例在新的任务栈中,我们可以修改taskAffinity 属性值。这种效果和启动方式为FLAG_ACTIVITY_NEW_TASK的效果是相同的。

singleInstance

此种的限制级比singleTask还要高。必须在新的任务中启动,并且此任务不允许有其他Activity实例。也就是说taskAffinity 任务关联的属性,对它并不能起作用,就算是相同的关联,也会在不同的任务中启动。
下面

Intent的启动模式:

FLAG_ACTIVITY_NEW_TASK
在新任务中启动 Activity。如果已为正在启动的 Activity 运行任务,则该任务会转到前台并恢复其最后状态,同时 Activity 会在 onNewIntent() 中收到新 Intent。
正如前文所述,这会产生与 “singleTask”launchMode 值相同的行为。
FLAG_ACTIVITY_SINGLE_TOP
如果正在启动的 Activity 是当前 Activity(位于返回栈的顶部),则 现有实例会接收对 onNewIntent() 的调用,而不是创建 Activity 的新实例。
正如前文所述,这会产生与 “singleTop”launchMode 值相同的行为。
FLAG_ACTIVITY_CLEAR_TOP
如果正在启动的 Activity 已在当前任务中运行,则会销毁当前任务顶部的所有 Activity,并通过 onNewIntent() 将此 Intent 传递给 Activity 已恢复的实例(现在位于顶部),而不是启动该 Activity 的新实例。
产生这种行为的 launchMode 属性没有值。
FLAG_ACTIVITY_CLEAR_TOP 通常与 FLAG_ACTIVITY_NEW_TASK 结合使用。一起使用时,通过这些标志,可以找到其他任务中的现有 Activity,并将其放入可从中响应 Intent 的位置。
注:如果指定 Activity 的启动模式为 “standard”,则该 Activity 也会从堆栈中移除,并在其位置启动一个新实例,以便处理传入的 Intent。 这是因为当启动模式为 “standard” 时,将始终为新 Intent 创建新实例。

注意点: Intent 中所定义优先级要高于 清单文件中所定义。

更多相关文章

  1. 查看android系统设备信息
  2. 获得Android设备的唯一序列号(一)
  3. Android中要让一个程序的界面始终保持一个方向(禁止转屏)
  4. 在Cocos2d-x中处理Android 系统设备的Menu和Back按键的响应
  5. android设备唯一码的获取之二
  6. Android设备Root检测方法
  7. 在定制android设备时,刷机后不全屏显示或实现长按Home键current a
  8. android命令行下创建虚拟设备avd
  9. Android 获取手机(ios,android)的设备唯一码(mac地址, IMEI)

随机推荐

  1. 如何快速修改MySQL用户的host属性
  2. mysql居然还能实现分布式锁的方法
  3. MySQL中使用流式查询避免数据OOM
  4. 浅谈为什么MySQL不建议delete删除数据
  5. Mysql连接数设置和获取的方法
  6. Mysql中索引和约束的示例语句
  7. sqoop export导出 map100% reduce0% 卡住
  8. mysql查询条件not in 和 in的区别及原因
  9. 解决mysql使用not in 包含null值的问题
  10. 解决从集合运算到mysql的not like找不出N