Android 总结:Manifest 文件中,application 和 activity 标签属性详解
在整型系统重置操作中,当他的设置被重置后,应用是否应该被终止。
单个包的重置操作不会引起应用被关闭。
整个系统的恢复操作仅代表性的发生一次,当电话第一次被设置时。
第三方应用将不会经常使用此属性。
默认值为 true,意思是,当整个系统被恢复时,应用运行完他的数据后,将会终止。
android:label
一个易读的应用标签,并且还是应用的每个组件的默认标签。
这个标签应该被设置为引用字符串资源,当然他也可以像其他字符串一样在用户接口中指定。
但是为了方便,在应用开发时,可以被设置未定义字符串。
android:manageSpaceActivity
一个 Activity 子类的全限定名称,这个 Activity 可以被系统启动让用户管理此应用占有的存储空间。
这个 Activity 也应该用< activity />元素声明。
android:name
为这个应用实现的 Application 子类的全限定名称。
当应用启动时,这个类将在应用的其他组件之前被实例化。
这个子类是可选的;大多数应用不需要。
在缺省时,Android 使用基本 Application 类的实例。
android:permission
客户为了和应用交互必须设置的许可的名称。
这个属性是一个便利的途径为应用的组件设置许可。
他可以被组件的 permission 属性重写。
android:persistent
应用是否在所有时间下都保持运行。
true 是,false 不是。
默认为 false。
通常情况下应用不应该设置此标识。
持久模式仅仅被几个系统应用指定。
android:process
为应用下的组件定一个运行进程名称。
每个组件可以定义自己的进程名称通过设置自己的 process 属性。
在默认情况下,Android 为应用创建一个进程,当应用的第一个组件需要运行时。
所有的组件在同一个进程下运行。这个进程的名称和在< manifest />元素设置的 backage 属性名相同。
通过设置这个属性在可以在其他应用中共享,你可以协调应用的组件在同一个进程中运行,但是只有两应用也共享用户 ID 和签订相同的证书。
如果这个属性的名称一个冒号(“:”)开始,一个新的私有的进程将被创建。
如果一个进程的名称以小写字母开头,一个公共的进程将被创建。
一个公共的进程可以被其他应用共享,来减少资源的使用。
android:restoreAnyVersion
表明这个应用准备尝试恢复所有的备份数据集合,甚至如果备份数据是比当前安装的应用高的编号存储的。
设置为 true 将允许备份管理者去尝试恢复当版本不匹配,意思是数据冲突。
要小心使用。默认为 false。
android:taskAffinity
提供给应用下所有组件的类同名称,除了设置了自己的 taskAffinity 属性的组件。
默认情况下所有的组件使用相同的 affinity。
Affinity 的名称和在< manifest />元素中设置的包名相同。
android:theme
为应用下的组件定义一个引用自样式资源的主题。
个别的 activities 可以设置自己的主题,通过设置自己的 theme 属性。
android:allowBackup
它表示是否允许应用程序参与备份。
如果将该属性设置为 false,则即使备份整个系统,也不会执行这个应用程序的备份操作。
而整个系统备份能导致所有应用程序数据通过 ADB 来保存。
该属性必须是一个布尔值,或为 true,或为 false。
默认值为 true。
android:largeHeap
应用程序是否使用一个比较大的堆创建。
它是一个布尔值,在没有配置的情况下,它的默认值是 false。
二、activity 标签属性
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”这两个模式。
android:alwaysRetainTaskState
该属性表明该 Activity 所在任务的状态是否由系统保存。
如果是,则其值为 true,如果配置为 false,则表示在一定情况下 Android 将以初始状态启动该任务。
默认值是 false。
注意,该属性仅对任务的根 Activity 起作用,其他的所有 Activity 都会被忽略。
当用户重新选择显示该任务的时候,系统在通常情况下将会清理掉任务中除了根 Activity 外的其他 Activity。这种情况通常是指用户在一定时间限制内未对该任务进行操作,例如 30 分钟内。反之如果该属性配置为 true 时,系统总会以任务的最后状态来显示该任务,而不管用户是如何返回的。
android:clearTaskOnLaunch
该属性表明,除了任务中的根 Activity,其他所有 Activity 是否都将从任务中移出。
如果想要在启动时只保留根 Activity,则设置这个属性的值为 true,否则为 false。
默认值是 false。
该属性仅对启动一个新任务的根 Activity 有意义。
当配置为 true 时,每当用户再次启动任务时,则总是由任务的根 Activity 来处理请求。
如果该属性和 allowTaskReparenting 都是 true,则可重新成为父任务的任何 Activity 就要被移动到具有相同亲和力的任务上,接着保留的 Activity 就被销毁。
android:configChanges
在某些设备配置(比如屏幕方向,字体大小,网络类型等)发生变化的时候,Activity 将会被重新启动以适配新的配置,这是系统行为。而 Android 同样为应用程序提供了一个阻止这种行为发生的手段,如果你不想因为某种配置变化而发生 Activity 重启,则可以通过配置这个属性并选择你想要阻止的配置。如果你配置完毕并选择了你关注的配置,则当这些配置发生改变的时候 Activity 不会重启,而是通过 onConfigurationChanged()回调方法通知应用程序这些配置发生了变化。
注意:如非必要,应该避免使用该属性
所有这些配置的改变都能影响到应用程序对资源文件的选择。所以,当 onConfigurationChanged()被调用时,通常需要重新获取所有的资源(包括视图布局和图片等),以便正确地处理这些改变。
注意,如果我们没有实现 onConfigurationChanged()回调,那么该 Activity 就会被销毁并重新创建。
android:enabled
该属性表示 Activity 是否能被实例化。
一般来说,每个 Activity 由 Activity 框架负责实例化,但你可以通过配置该属性来限制系统的这种行为。
为 true 表示由系统实例化,否则为 false。
默认值是 true。
对于每一个 Activity 的子类,在它首次运行之前总要进行实例化,这个步骤是必须的。
我们可以使用这个属性来控制 Android 框架实例化 Activity 的行为,~但这样做是有风险的,所以不建议你这样做~。
android:excludeFromRecents
Android 框架为我们维护了一个名叫**“最近运行”的应用程序列表**,以方便进行应用程序切换。
该属性表示应用程序是否应该将 Activity 从最近运行的应用程序列表排除。
如果排除,则为 true,否则为 false。
默认值为 false。
《Android 学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
这个属性的前提是该 Activity 是某个任务的根 Activity。
android:exported
该属性表示 Activity 是否可以由其他应用程序中的组件来启动。
如果可以,则为 true,否则为 false。
如果为 false,则该 Activity 只能由同一应用程序的组件或者有同样用户 ID 的应用程序来启动。
注意,如果你试图从你的应用程序中启动其他应用程序组件,在没有使用该属性的情况下,你必须以新任务(newTask)的方式启动。
android:finishOnTaskLaunch
该属性是指不管何时,当用户再次启动 Activity 的任务时(在主页屏幕上选择该任务),
是否应销毁(或者终止)这个 Activity 的实例,
如果应销毁,则为 true,否则为 false.
默认值是 false。
android:hardwareAccelerated
该属性是指是否应为该 Activity 启动硬件加速。
如果应启动,则为 true,否则为 false。
默认值是 false。
注意:不是所有的 OpenGL 2D 操作都会被加速。
如果启用硬件加速渲染器,则要测试你的应用程序以便确保它能使用渲染器而不会产生错误。
android:icon
它代表 Activity 和图标。
在 Activity 被显示的时候,就用该图标显示给用户。
例如,用于示例任务的 Activity 的图标,或者桌面上的图标。
该属性 必须 设置为图片资源引用,如果没有设置,就使用< application />节点上的 icon 属性。
android:label
该属性用于描述该 Activity 的一个标签,通常是随着 Activity 图标一起显示出来的。
如果没有设置该属性,则使用< application />节点上的 label 属性设置的值。
android:launchMode
这个属性描述了该 Activity 应该如何被启动。
在 Intent 对象中,与 Activity 标志一起工作的模式有 4 种,
分别是:standard
, singleTop
, singleTask
和 singleInstance
。
默认模式是 standard。
模式有两类,
一类是
standard
和singleTop
,另一类是singleTask
和singleInstance
。有
standard
和singleTop
启动模式的 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 中一样。
android:multiprocess
该属性表示 Activity 的实例是否可以运行在启动它的组件所在的应用程序进程中。
如果可以,则为 true,否则为 false。
默认值是 false。
android:name
该属性表示 Activity 的类名,它是 Activity 的子类。
其属性值应该是一个标准的 Java 类名(如 com.example.liyuanjing.ManiActivity)。
我们也可以将其标识为类的缩写,比如名称的首字母是一个点(例如.ManiActivity),
那么它就被追加< manifest />元素指定的包名,
从而变成 com.example.liyuanjing.ManiActivity(假设包名为 com.example.liyuanjing)。
这点完全由系统完成,我们不需要关心这个过程的细节,但这个属性是必须配置的,并且不提供默认值。
android:noHistory
这个属性用于设置在用户离开该 Activity,并且它在屏幕上不再可见的时候,是否应该从 Activity 的堆栈中删除。
如果应该删除,则为 true,否则为 false,默认值是 false。
true 意味着 Activity 将不会留下历史痕迹,它将不会为任务而在 Activity 栈中保留数据,
所以用户将不能返回到 Activity 上。
android:permission
表示的是权限名称。
如果 startActivity()或者 startActivityForResult()的调用者还没有被授予指定的权限,则启动失败。
如果该属性没有设置,则< application />元素的 permission 属性设置的权限就应该应用到 Activity 中。
如果这两个属性都没有设置,则 Activity 就不会被权限保护。
android:process
该属性表示该 Activity 运行的进程名称。
通常,应用程序的所有组件在为应用程序而创建的默认进程中运行。
< application />元素的 process 属性可以为所有组件设置一个不同的进程,
但是每个组件可以覆盖这个属性的值,这样就实现了将应用程序部署在多个进程间。
如果分配该属性的名称是以冒号(:)开头,则在需要新进程并且 Activity 在该进程中运行的时候,
就会创建一个对于应用程序私有的新进程。
android:screenOrientation
该属性表示 Activity 显示的方向(比如纵向,横向),它是值可以是下表中的任意一个字符。
取值 说明
unspecified 默认值,根据重力感应选择方向
user 用户当前偏好的方向
behind 和 Activity 相同的方向
landscape 横向
portrait 纵向
reverseLandscape 与正常横向相反方向 的横向
reversePortrait 与正常纵向相反方向的纵向
sensorLandscape 只能是横向,但是可以根据重力感应来决定是正常的还是反转的横向
sensorPortrait 中能是纵向,但是可以根据重力感应来决定是正常的或者反转的纵向
sensor 方向由设备方向感应器来决定。显示的方向取决于用户是如何持有设备的;在用户翻转设备时,方向发生改变。有些设备在默认情况下不会翻转到所有 4 个可能的方向。要允许可翻转到所有 4 个方向,可以使用 fullSensor。
fullSensor 方向由设备方向感应为 4 个方向中的任意一个而确定
nosensor 无感应模式
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 架构师技术脑图;查漏补缺,体系化深入学习提升
**全套体系化高级架构视频;**七大主流技术模块,视频+源码+笔记

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