这个元素声明了一个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始终是单独存在的,并且是其任务中唯一的成员 |
不管选择了那种启动模式,都要测试Activity在启动期间的可用性,并且在使用Back按钮时能够返回到其他的Activity和任务。
8、android:screenOrientation 属性