AndroidManifest.xml清单文件详解--activity节点

本文详细解析了AndroidManifest.xml文件中activity节点的各项属性,包括标签、图标、启动模式、配置变化处理、任务亲缘关系等,探讨了如何设置Activity的行为和外观,以及与Intent对象、任务和配置变化的关系。
摘要由CSDN通过智能技术生成
一、关于节点activity节点
这个元素声明了一个Activity(或Activity的子类),Activity实现了应用程序的可视化用户界面部分。应用程序中所有的Activity都必须在清单文件中用元素来声明,没有在清单文件中声明的Activity,系统不会看到,也不会运行它。


二、activity节点属性

(1)android:name

(2)android:theme
(3)android:label
(4)android:description
(5)android:icon
(6)android:logo
(7)android:launchMode
(8)android:screenOrientation
(9)android:configChanges
(10)android:permission
(11)android:multiprocess
(12)android:process
(13)android:taskAffinity
(14)android:allowTaskReparenting
(15)android:finishOnTaskLaunch
(16)android:finishOnCloseSystemDialogs
(17)android:clearTaskOnLaunch
(18)android:noHistory
(19)android:alwaysRetainTaskState
(20)android:stateNotNeeded
(21)android:excludeFromRecents
(22)android:showOnLockScreen
(23)android:enabled        
(24)android:exported
(25)android:windowSoftInputMode
(26)android:immersive
(27)android:hardwareAccelerated
(28)android:uiOptions
(29)android:parentActivityName
(30)android:singleUser


1、android:name属性

这个属性用于设置Activity的实现类(Activity的子类)的名字。这个属性值应该是完整的 Java 类名,如:com.example.project.ExtracurricularActivity。但是,可以用简写的方式,名字第一个字符用“.”符号,如:.ExtracurricularActivity。它对应的包名是在元素中指定的。

一旦发布了应用程序,就不应该改变这个名称了(除非设置了android:exported=”false”)。这个属性没有默认值,名称必须被指定。


2、android:theme属性

这个属性用于设定Activity整体主题,它会应用一个样式资源。 系统会使用这个主题来自动的设置Activity的内容。
如果这个属性没有设置,Activity会继承应用程序的主题(元素的theme属性)做它的整体样式。如果这个属性也没有设置,那么默认使用系统的主题。


3、android:label属性

这个属性给Activity设置了一个可读的标签。当Activity要展现给用户的时候,这个标签会显示在屏幕上,它经常会跟Activity的图标一起来显示。
如果这个属性没有被设置,就会使用给应用程序设置的标签来代替。
Activity的标签(或者是元素设置的标签)也是所有Activity的Intent过滤器的默认标签。
这个属性应该用一个字符串资源来设置。以便它能够在用户界面中用其他的语言来本地化。但是为了开发应用程序的便利,也可以用原始的字符串来设置。



4、android:description属性


5、android:icon属性

这属性定义了代表Activity的一个图标。当Activity被要求显示到屏幕上时,这个图标会被显示给用户。例如,这个图标会显示在Launcher的窗口中,用于启动任务。这个图标经常会和label属性组合使用。
这个属性必须被设置为一个包含图片定义的可绘制资源。如果没有设置,就会使用给应用程序设置的图标来代替。
Activity的图标(或者是元素设置的图标)也是所有的Activity的Intent过滤器的默认图标。



6、android:logo属性


7、android:launchMode 属性

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

standard

singleTop

singleTask

singleInstance

默认的模式是standard。

像下表显示的那样,这四种模式被分成两组,standard和singleTop为一组,singleTask和singleInstance为一组。带有standard和singleTop启动模式的Activity能够被实例化多次。其实例能够属于任何任务,并且能够在Activity的堆栈中被定为。通常是调用startActivity()方法把它们加载到任务中(除非Intent对象包含了一个FLAG_ACTIVITY_NEW_TASK指令,这种情况下会选择启动一个新的任务。)

相比之下,singleTask和singleInstance启动模式的Activity只能启动一个任务。它们始终是Activity堆栈的根节点。并且设备每次只能拥有一个这样的Activity---只有一个这样的任务。

standard和singleTop模式彼此在一个方面有所不同:对于standard启动模式的Activity,每次要有一个新的Intent对象才能启动,系统会创建一个新的Activity类的实例来响应Intent对象的请求。每个实例处理一个Intent对象。同样,singleTop启动模式的Activity也会创建一个新的实例来处理一个新的Intent对象。但是,如果目标任务中在堆栈的顶部已经有了这个Activity的实例,那么这个实例会接受这个新的Intent对象(在onNewIntent()回调方法中调用);而不是创一个新的Activity实例。另一种情况,如:如果singleTop启动模式的Activity的一个实例,在目标任务中已经存在,但是它没有在任务堆栈的顶部,或者是在堆栈的顶部,却不是目标任务,那么就会创建一个新的Activity实例,并把它压入目标任务堆栈。

singleTask和singleInstance模式彼此也在一个方面有所不同:singleTask模式的Activity,允许其他Activity作为它所在任务的一部分。它始终在所在任务的根节点,但是其他的Activity(需要是standard和singleTop模式的Activity)能够被加载到它的任务中。而singleInstance模式的Activity,不允许其他的Activity做它所在任务的一部分。它是其任务中唯一的Activity。如果要启动另外的Activity,那么被启动的Activity要关联到不同的任务中---就像是在Intent对象中设置了FLAG_ACTIVITY_NEW_TASK标记一样。

  

使用场景 启动模式 支持多实例吗? 解释
针对大多数Activity的启动模式 standard Yes 默认启动模式,系统总是在目标任务中创建一个新的Activity实例,并把Intent对象发送给它。
singleTop 有条件的 如果这中模式的Activity始终存在与目标任务堆栈的顶部,系统就会通过调用它的onNewIntent()方法,把Intent对象发送给这个实例,而不是创建一个的Activity实例。
特殊的启动模式,通常不推荐使用。 singleTask No 系统在一个新任务堆栈的根节点处创建这个Activity,并且把Intent对象发送给它。但是,如果这个Activity的实例已经存在,系统就会通过调用它的onNewIntent()方法,把Intent对象发送给这个实例,而不是创建一个的Activity实例。
singleInstance No 除了系统不能把其他的Activity加载到该Activity实例所归属的任务中之外,其他与singleTask模式相同。这种模式的Activity始终是单独存在的,并且是其任务中唯一的成员
如上表所示,standard模式是默认模式,并且适用于大多数Activity。singleTop也是一种通用的,且被很多Activity类型所使用的启动模式。其他模式(singleTask和singleInstance)是不推荐给大多数应用程序使用的,因为它们会产生用户不熟悉的交互模式,并且与大多数应用程序也会产生差异。
不管选择了那种启动模式,都要测试Activity在启动期间的可用性,并且在使用Back按钮时能够返回到其他的Activity和任务。


8、android:screenOrientation
属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值