写点什么

Android 总结:Manifest 文件中,application 和 activity 标签属性详解

作者:嘟嘟侠客
  • 2021 年 11 月 27 日
  • 本文字数:6442 字

    阅读完需:约 21 分钟

在整型系统重置操作中,当他的设置被重置后,应用是否应该被终止。


单个包的重置操作不会引起应用被关闭。


整个系统的恢复操作仅代表性的发生一次,当电话第一次被设置时。


第三方应用将不会经常使用此属性。


默认值为 true,意思是,当整个系统被恢复时,应用运行完他的数据后,将会终止。


  1. android:label


一个易读的应用标签,并且还是应用的每个组件的默认标签。


这个标签应该被设置为引用字符串资源,当然他也可以像其他字符串一样在用户接口中指定。


但是为了方便,在应用开发时,可以被设置未定义字符串。


  1. android:manageSpaceActivity


一个 Activity 子类的全限定名称,这个 Activity 可以被系统启动让用户管理此应用占有的存储空间。


这个 Activity 也应该用< activity />元素声明。


  1. android:name


为这个应用实现的 Application 子类的全限定名称。


当应用启动时,这个类将在应用的其他组件之前被实例化。


这个子类是可选的;大多数应用不需要。


在缺省时,Android 使用基本 Application 类的实例。


  1. android:permission


客户为了和应用交互必须设置的许可的名称。


这个属性是一个便利的途径为应用的组件设置许可。


他可以被组件的 permission 属性重写。


  1. android:persistent


应用是否在所有时间下都保持运行。


true 是,false 不是。


默认为 false。


通常情况下应用不应该设置此标识。


持久模式仅仅被几个系统应用指定。


  1. android:process


为应用下的组件定一个运行进程名称。


每个组件可以定义自己的进程名称通过设置自己的 process 属性。


在默认情况下,Android 为应用创建一个进程,当应用的第一个组件需要运行时。


所有的组件在同一个进程下运行。这个进程的名称和在< manifest />元素设置的 backage 属性名相同。


通过设置这个属性在可以在其他应用中共享,你可以协调应用的组件在同一个进程中运行,但是只有两应用也共享用户 ID 和签订相同的证书。


如果这个属性的名称一个冒号(“:”)开始,一个新的私有的进程将被创建。


如果一个进程的名称以小写字母开头,一个公共的进程将被创建。


一个公共的进程可以被其他应用共享,来减少资源的使用。


  1. android:restoreAnyVersion


表明这个应用准备尝试恢复所有的备份数据集合,甚至如果备份数据是比当前安装的应用高的编号存储的。


设置为 true 将允许备份管理者去尝试恢复当版本不匹配,意思是数据冲突。


要小心使用。默认为 false。


  1. android:taskAffinity


提供给应用下所有组件的类同名称,除了设置了自己的 taskAffinity 属性的组件。


默认情况下所有的组件使用相同的 affinity。


Affinity 的名称和在< manifest />元素中设置的包名相同。


  1. android:theme


为应用下的组件定义一个引用自样式资源的主题。


个别的 activities 可以设置自己的主题,通过设置自己的 theme 属性。


  1. android:allowBackup


它表示是否允许应用程序参与备份。


如果将该属性设置为 false,则即使备份整个系统,也不会执行这个应用程序的备份操作。


而整个系统备份能导致所有应用程序数据通过 ADB 来保存。


该属性必须是一个布尔值,或为 true,或为 false。


默认值为 true。


  1. android:largeHeap


应用程序是否使用一个比较大的堆创建。


它是一个布尔值,在没有配置的情况下,它的默认值是 false。

二、activity 标签属性

  1. android:allowTaskReparenting


  • android:allowTaskReparenting 是一个任务调整属性。

  • 它表明当这个任务重新被送到前台时,该应用程序所定义的 Activity 是否可以从被启动的任务中转移到有相同亲和力的任务中。

  • 为什么在这里还要在提一次呢?因为它与< application />的 android:allowTaskReparenting 属性重叠,因此当为正在配置的 Activity 提供该属性的时候,它的默认值首先来自< application />节点。如果< application/>节点上没有配置该属性的时候,则 false 就是它的默认值。

  • 通常,当一个 Activity 启动的时候,Activity 管理服务就会为这个 Activity 生成一个任务并将此 Activity 与之相关联。在一个任务中可能存在多个 Activity,它按照一定顺序排列在这个任务中,我们可以使用这个属性来强制它重新成为此任务的顶层 Activity。在当前的任务不再显示时,也就是说,与此 Activity 相关联任务不在前台显示的时候,可以使用这个特性来强制 Activity 转移到与之有相同亲和力的任务(taskAffinity 属性定义的任务)中。典型的用法是把一个应用程序的 Activity 移到另一个应用程序的主任务中。

  • 例如,如果我们收到的一条短信(MMS 应用程序)中包含一个电话号码文本,此时可以单击电话号码来启动拨号的快捷界面。但是,这个拨号界面是联系人应用程序的一个 Activity,在这个场景下,它可能成为 MMS 应用程序启动的任务中的一个 Activity,并位于该任务的顶层。如果它重新定位到联系人的任务中,则我们重新启动短信任务的时候就看不到这个拨号界面了。

  • Activity 的亲和力是由 taskAffinity 属性定义的,Task 的亲和力是通过读取当前任务根 Activity 的亲和力决定的。因此,根据定义,根 Activity 总是位于相同亲和力的任务里。由于在某些需求的要求下,一些 Activity 的启动模式(由 launchModel 属性定义)为 singleTask 和 singleInstance,此类 Activity 只能位于任务的底部,因此,想要使用 allowTaskReparenting 属性来调整 Activity 所属任务,则启动默认只能限于”standard”和”singleTop”这两个模式。


  1. android:alwaysRetainTaskState


该属性表明该 Activity 所在任务的状态是否由系统保存。


如果是,则其值为 true,如果配置为 false,则表示在一定情况下 Android 将以初始状态启动该任务。


默认值是 false。


  • 注意,该属性仅对任务的根 Activity 起作用,其他的所有 Activity 都会被忽略。

  • 当用户重新选择显示该任务的时候,系统在通常情况下将会清理掉任务中除了根 Activity 外的其他 Activity。这种情况通常是指用户在一定时间限制内未对该任务进行操作,例如 30 分钟内。反之如果该属性配置为 true 时,系统总会以任务的最后状态来显示该任务,而不管用户是如何返回的。


  1. android:clearTaskOnLaunch


该属性表明,除了任务中的根 Activity,其他所有 Activity 是否都将从任务中移出。


如果想要在启动时只保留根 Activity,则设置这个属性的值为 true,否则为 false。


默认值是 false。


  • 该属性仅对启动一个新任务的根 Activity 有意义。

  • 当配置为 true 时,每当用户再次启动任务时,则总是由任务的根 Activity 来处理请求。

  • 如果该属性和 allowTaskReparenting 都是 true,则可重新成为父任务的任何 Activity 就要被移动到具有相同亲和力的任务上,接着保留的 Activity 就被销毁。


  1. android:configChanges


在某些设备配置(比如屏幕方向,字体大小,网络类型等)发生变化的时候,Activity 将会被重新启动以适配新的配置,这是系统行为。而 Android 同样为应用程序提供了一个阻止这种行为发生的手段,如果你不想因为某种配置变化而发生 Activity 重启,则可以通过配置这个属性并选择你想要阻止的配置。如果你配置完毕并选择了你关注的配置,则当这些配置发生改变的时候 Activity 不会重启,而是通过 onConfigurationChanged()回调方法通知应用程序这些配置发生了变化。


  • 注意:如非必要,应该避免使用该属性


所有这些配置的改变都能影响到应用程序对资源文件的选择。所以,当 onConfigurationChanged()被调用时,通常需要重新获取所有的资源(包括视图布局和图片等),以便正确地处理这些改变。


注意,如果我们没有实现 onConfigurationChanged()回调,那么该 Activity 就会被销毁并重新创建。


  1. android:enabled


该属性表示 Activity 是否能被实例化。


一般来说,每个 Activity 由 Activity 框架负责实例化,但你可以通过配置该属性来限制系统的这种行为。


为 true 表示由系统实例化,否则为 false。


默认值是 true。


对于每一个 Activity 的子类,在它首次运行之前总要进行实例化,这个步骤是必须的。


我们可以使用这个属性来控制 Android 框架实例化 Activity 的行为,~但这样做是有风险的,所以不建议你这样做~。


  1. android:excludeFromRecents


Android 框架为我们维护了一个名叫**“最近运行”的应用程序列表**,以方便进行应用程序切换。


该属性表示应用程序是否应该将 Activity 从最近运行的应用程序列表排除。


如果排除,则为 true,否则为 false。


默认值为 false。


《Android 学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享


这个属性的前提是该 Activity 是某个任务的根 Activity。


  1. android:exported


该属性表示 Activity 是否可以由其他应用程序中的组件来启动。


如果可以,则为 true,否则为 false。


如果为 false,则该 Activity 只能由同一应用程序的组件或者有同样用户 ID 的应用程序来启动。


注意,如果你试图从你的应用程序中启动其他应用程序组件,在没有使用该属性的情况下,你必须以新任务(newTask)的方式启动。


  1. android:finishOnTaskLaunch


该属性是指不管何时,当用户再次启动 Activity 的任务时(在主页屏幕上选择该任务),


是否应销毁(或者终止)这个 Activity 的实例,


如果应销毁,则为 true,否则为 false.


默认值是 false。


  1. android:hardwareAccelerated


该属性是指是否应为该 Activity 启动硬件加速。


如果应启动,则为 true,否则为 false。


默认值是 false。


  • 注意:不是所有的 OpenGL 2D 操作都会被加速。


如果启用硬件加速渲染器,则要测试你的应用程序以便确保它能使用渲染器而不会产生错误。


  1. android:icon


它代表 Activity 和图标。


在 Activity 被显示的时候,就用该图标显示给用户。


例如,用于示例任务的 Activity 的图标,或者桌面上的图标。


该属性 必须 设置为图片资源引用,如果没有设置,就使用< application />节点上的 icon 属性。


  1. android:label


该属性用于描述该 Activity 的一个标签,通常是随着 Activity 图标一起显示出来的。


如果没有设置该属性,则使用< application />节点上的 label 属性设置的值。


  1. android:launchMode


这个属性描述了该 Activity 应该如何被启动。


在 Intent 对象中,与 Activity 标志一起工作的模式有 4 种,


分别是:standard , singleTop , singleTasksingleInstance


默认模式是 standard。


  • 模式有两类,

  • 一类是 standardsingleTop ,另一类是 singleTasksingleInstance

  • standardsingleTop 启动模式的 Activity 可多次被实例化。

  • standard 是默认。系统总是在目标任务中创建 Activity 的一个新实例并且将 intent 按顺序放入到实例中。

  • singleTop 有条件的 。如果 Activity 的实例已经存在于目标任务的顶部,


则系统通过调用 onNewIntent()方法将 intent 发送到该实例上,而不是创建 Activity 的一个新实例。


  • singleTask 系统在新任务的根上创建该 Activity。


如果已经存在实例,则系统通过调用 onNewIntent()方法来将 intent 发送到该 Activity 上,它允许在这个 Activity 为根的任务中创建新的 Activity。


  • singleInstance 和 singleTask 一样,除了系统不启动任何其他 Activity 到持有实例的任务上,Activity 总是单个的,而且是其任务的唯一成员。

  • 相反,singleTask 和 singleInstance 这两种模式下的 Activity 只能启动一个任务它们一直待在 Activity 栈的根上。此外,设备一次只保存 Activity 的一个实例。

  • standard 和 singleTop 模式只在一个方面上是不同的。在 satndard 模式下,每次都会实例化一个 Activity 新实例来响应这个 Intent,每个实例处理一个 intent。与此相似的是,singleTop 模式下的 Activity 的新实例也可被创建来处理新的 intent。但是,如果目标任务在其栈的顶部已经有 Activity 的一个实例,则会使用这个已经存在的 Activity 的实例来处理这个 intent(回调 onNewintent()方法),而不会创建一个新实例。在其他情况下,如果 singleTop 模式下的 Activity 的一个已存在实例在目标任务中而非栈的顶部,或者如果它在栈的顶部而非目标任务中,就会创建一个新实例并将它压倒 Activity 栈顶上。

  • singleTask 和 singleInstance 模式也同样存在不同的启动特性。singleTask 模式下的 Activity 允许其他 Activity 成为它的任务的一部分,它总是在自身任务的根上,但是其他 Activity 可以被启动到该任务中。另一方面,singleInstance 模式下的 Activity 不允许其他 Activity 成为其任务的一部分,它是任务中唯一的 Activity。如果它启动了另一个 Activity,则该 Activity 就被分配到不同的任务上,好比 FLAG_ACTIVITY_NEW_TASK 在 intent 中一样。


  1. android:multiprocess


该属性表示 Activity 的实例是否可以运行在启动它的组件所在的应用程序进程中。


如果可以,则为 true,否则为 false。


默认值是 false。


  1. android:name


该属性表示 Activity 的类名,它是 Activity 的子类。


其属性值应该是一个标准的 Java 类名(如 com.example.liyuanjing.ManiActivity)。


我们也可以将其标识为类的缩写,比如名称的首字母是一个点(例如.ManiActivity),


那么它就被追加< manifest />元素指定的包名,


从而变成 com.example.liyuanjing.ManiActivity(假设包名为 com.example.liyuanjing)。


这点完全由系统完成,我们不需要关心这个过程的细节,但这个属性是必须配置的,并且不提供默认值。


  1. android:noHistory


这个属性用于设置在用户离开该 Activity,并且它在屏幕上不再可见的时候,是否应该从 Activity 的堆栈中删除。


如果应该删除,则为 true,否则为 false,默认值是 false。


true 意味着 Activity 将不会留下历史痕迹,它将不会为任务而在 Activity 栈中保留数据,


所以用户将不能返回到 Activity 上。


  1. android:permission


表示的是权限名称。


如果 startActivity()或者 startActivityForResult()的调用者还没有被授予指定的权限,则启动失败。


如果该属性没有设置,则< application />元素的 permission 属性设置的权限就应该应用到 Activity 中。


如果这两个属性都没有设置,则 Activity 就不会被权限保护。


  1. android:process


该属性表示该 Activity 运行的进程名称。


通常,应用程序的所有组件在为应用程序而创建的默认进程中运行。


< application />元素的 process 属性可以为所有组件设置一个不同的进程,


但是每个组件可以覆盖这个属性的值,这样就实现了将应用程序部署在多个进程间。


如果分配该属性的名称是以冒号(:)开头,则在需要新进程并且 Activity 在该进程中运行的时候,


就会创建一个对于应用程序私有的新进程。


  1. android:screenOrientation


该属性表示 Activity 显示的方向(比如纵向,横向),它是值可以是下表中的任意一个字符。


取值 说明


  • unspecified 默认值,根据重力感应选择方向

  • user 用户当前偏好的方向

  • behind 和 Activity 相同的方向

  • landscape 横向

  • portrait 纵向

  • reverseLandscape 与正常横向相反方向 的横向

  • reversePortrait 与正常纵向相反方向的纵向

  • sensorLandscape 只能是横向,但是可以根据重力感应来决定是正常的还是反转的横向

  • sensorPortrait 中能是纵向,但是可以根据重力感应来决定是正常的或者反转的纵向

  • sensor 方向由设备方向感应器来决定。显示的方向取决于用户是如何持有设备的;在用户翻转设备时,方向发生改变。有些设备在默认情况下不会翻转到所有 4 个可能的方向。要允许可翻转到所有 4 个方向,可以使用 fullSensor。

  • fullSensor 方向由设备方向感应为 4 个方向中的任意一个而确定

  • nosensor 无感应模式


  1. android:stateNotNeeded


该属性表明 Activity 是否能被终止以及是否能在还没有保存其状态的情况下成功重启。


如果 Activity 可以在不需要引用到之前状态的情况下就能被重启,则该属性为 true;


如果需要引用到之前的状态才能被重启,则为 false。默认值是 false。


  • 通常,在暂时关闭 Activity 之前,我们要调用 onSaveInstanceState()方法来保存当前的 Activity 的状态。该方法在 Bundle 对象中存储 Activity 的当前状态,该对象在重启 Activity 时将会以参数的方式传给 onCreate()方法。

  • 如果该属性被设置为 true,则 onSaveInstanceState()就不会被调用,并且 onCreate()会被传递 null,这和 Activity 首次启动时所做的一样。

最后

分享一份工作 1 到 5 年以上的 Android 程序员架构进阶学习路线体系,希望能对那些还在从事 Android 开发却还不知道如何去提升自己的,还处于迷茫的朋友!


  • 阿里 P7 级 Android 架构师技术脑图;查漏补缺,体系化深入学习提升


  • **全套体系化高级架构视频;**七大主流技术模块,视频+源码+笔记



有任何问题,欢迎广大网友一起来交流


本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

用户头像

嘟嘟侠客

关注

还未添加个人签名 2021.03.19 加入

还未添加个人简介

评论

发布
暂无评论
Android 总结:Manifest文件中,application和activity标签属性详解