Android清单文件具体解释(六) ---- <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"这两个模式。
2.android:alwaysRetainTaskState
该属性表明该Activity所在任务的状态是否由系统保存,假设是。则其值为true,假设配置为false。则表示在一定情况下Android将以初始状态启动该任务。该属性的默认值是false。须要注意的是。该属性仅对任务的根Activity起作用,其它的全部Activity都会被忽略。
当用户又一次选择显示该任务的时候。系统在通常情况下将会清理掉任务中除了根Activity外的其它Activity。
这样的情况一般是指用户在一定时间限制内未对该任务进行操作,比如30分钟内。反之假设该属性配置为true时,系统总会以任务的最后状态来显示该任务,而无论用户是怎样返回的。
3.android:clearTaskOnLaunch
该属性表明,除了任务中的根Activity,其它全部Activity是否都将从任务中移出。
假设想要在启动时仅仅保留根Activity,则设置这个属性的值为true,否则为false。 这个属性的默认值是false。该属性仅对启动一个新任务的根Activity有意义。
当配置为true时,每当用户再次启动任务时。则总是由任务的根Activity来处理请求。
假设该属性和allowTaskReparenting都是true,则可又一次成为父任务的不论什么Activity就要被移动到具有同样亲和力的任务上。接着保留的Activity就被销毁
4.android:configChanges
在某些设备配置(比方屏幕方向。字体大小,网络类型等)发生变化的时候,Activity将会被又一次启动以适配新的配置。这是系统行为。而Android相同为应用程序提供了一个阻止这样的行为发生的手段,假设你不想由于某种配置变化而发生Activity重新启动,则能够通过配置这个属性并选择你想要阻止的配置。假设你配置完成并选择了你关注的配置,则当这些配置发生改变的时候Activity不会重新启动,而是通过onConfigurationChanged()回调方法通知应用程序这些配置发生了变化。
注意:如非必要。应该避免使用该属性
下表列出了该属性的有效值,要设置多个的时候,用“|”切割开就可以。
值 | 描写叙述 |
mcc | IMSI移动国家代码改变----SIM中的MCC信息被更新 |
mnc | IMSI移动网络代码----SIM的MNC信息被更新 |
locale | 语言环境已改变----用户通过设置功能选择了一种新语言触屏发生变化 |
touchscreen | 触屏发生变化 |
keyboard | 键盘类型已改变----比如,用户接入了一个外部键盘 |
keyboardHidden | 键盘可见性已改变 |
screenLayout | 屏幕布局已改变 |
fontScale | 字体缩放因素已改变-----用户通过设置模块选择了新的字体大小 |
uiMode | 用户界面模式已改变-----在用户将设备放究竟座上的时候,或者夜间模式改变的时候,就会引起用户界面的改变 |
Orientation | 屏幕方向已改变----用户翻转了设备 注意:假设应用程序是定位于API Level13或者更高,则也应声明screenSize配置。由于当设备在横向和纵向之间切换时,它也会改变 |
screenSize | 当前可用的屏幕尺寸已改变,这表明在当前可用的尺寸中的变化。关系到当前的长宽比。当用户在横向和纵向间切换时,也会发生这样的情况。可是。假设应用程序定位于API Level12或者更低时,那么Activity将总是自行处理该配置。 |
smallestScreenSize | 物理屏幕尺寸已改变。
这表明在尺寸上的改变。无论方向怎样,也仅仅在实际的物理屏幕尺寸改变(如转换到外部显示)时才会改变。对该配置的改动响应了smallestWidth配置中的一个改变。可是,假设应用程序定位于API Level12或者更低,则Activity总是自行处理对该配置的改动 |
全部这些配置的改变都能影响到应用程序对资源文件的选择。所以。当onConfigurationChanged()被调用时,通常须要又一次获取全部的资源(包含视图布局和图片等),以便正确地处理这些改变。
须要注意的是,假设我们没有实现onConfigurationChanged()回调,那么该Activity就会被销毁并又一次创建。
5.android:enabled
一般来说,每个Activity由Activity框架负责实例化,但你能够通过配置该属性来限制系统的这样的行为。
该属性表示Activity能否被实例化,为true表示由系统实例化,否则为false。该属性默认值是true。
对于每个Activity的子类。在它首次执行之前总要进行实例化。这个步骤是必须的。我们能够使用这个属性来控制Android框架实例化Activity的行为,但这样做是有风险的,所以不建议你这样做。
6.android:excludeFromRecents
Android框架为我们维护了一个名叫“近期执行”的应用程序列表,以方便进行应用程序切换。该属性表示应用程序是否应该将Activity从近期执行的应用程序列表排除,假设排除。则为true。否则为false。
该属性的默认值为false。这个属性的前提是该Activity是某个任务的根Activity。
7.android:exported
该属性表示Activity能否够由其它应用程序中的组件来启动,假设能够。则为true,否则为false。
假设为false,则该Activity仅仅能由同一应用程序的组件或者有相同用户ID的应用程序来启动。
值得注意的是,假设你试图从你的应用程序中启动其它应用程序组件,在没有使用该属性的情况下,你必须以新任务(newTask)的方式启动
8.android:finishOnTaskLaunch
该属性是指无论何时,当用户再次启动Activity的任务时(在主页屏幕上选择该任务)。是否应销毁(或者终止)这个Activity的实例。假设应销毁,则为true,否则为false.该属性的默认值是false。
9.android:hardwareAccelerated
该属性是指是否应为该Activity启动硬件加速,假设应启动,则为true,否则为false。
默认值是false。
注意:不是全部的OpenGL 2D操作都会被加速。假设启用硬件加速渲染器。则要測试你的应用程序以便确保它能使用渲染器而不会产生错误。
10.android:icon
它代表Activity和图标。在Activity被显示的时候,就用该图标显示给用户。
比如。用于演示样例任务的Activity的图标,或者桌面上的图标。
该属性必须设置为图片资源引用。假设没有设置。就使用<application>节点上的icon属性。
11.android:label
该属性用于描写叙述该Activity的一个标签,一般是随着Activity图标一起显示出来的。
假设没有设置该属性,则使用<application>节点上的label属性设置的值。
12.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中一样。
13.android:multiprocess
该属性表示Activity的实例能否够执行在启动它的组件所在的应用程序进程中。假设能够,则为true,否则为false。其默认值是false。
14.android:name
该属性表示Activity的类名,它是Activity的子类,其属性值应该是一个标准的Java类名(如com.example.liyuanjing.ManiActivity)。我们也能够将其标识为类的缩写。比方名称的首字母是一个点(比如.ManiActivity),那么它就被追加<manifest>元素指定的包名,从而变成com.example.liyuanjing.ManiActivity(如果包名为com.example.liyuanjing)。
这点全然由系统完毕,我们不须要关心这个过程的细节,但这个属性是必须配置的,而且不提供默认值。
15.android:noHistory
这个属性用于设置在用户离开该Activity。而且它在屏幕上不再可见的时候,是否应该从Activity的堆栈中删除。假设应该删除,则为true。否则为false。默认值是false。
true意味着Activity将不会留下历史痕迹。它将不会为任务而在Activity栈中保留数据,所以用户将不能返回到Activity上。
16.android:permission
表示的是权限名称。假设startActivity()或者startActivityForResult()的调用者还没有被授予指定的权限。则启动失败。
假设该属性没有设置,则<application>元素的permission属性设置的权限就应该应用到Activity中。假设这两个属性都没有设置,则Activity就不会被权限保护。
17.android:process
该属性表示该Activity执行的进程名称。
通常。应用程序的全部组件在为应用程序而创建的默认进程中执行。<application>元素的process属性能够为全部组件设置一个不同的进程。可是每一个组件能够覆盖这个属性的值,这样就实现了将应用程序部署在多个进程间。
假设分配该属性的名称是以冒号(:)开头,则在须要新进程而且Activity在该进程中执行的时候,就会创建一个对于应用程序私有的新进程。
18.android:screenOrientation
该属性表示Activity显示的方向(比方纵向,横向),它是值能够是下表中的随意一个字符。
取值 | 说明 |
unspecified | 默认值,依据重力感应选择方向 |
user | 用户当前偏好的方向 |
behind | 和Activity同样的方向 |
landscape | 横向 |
portrait | 纵向 |
reverseLandscape | 与正常横向相反方向 的横向 |
reversePortrait | 与正常纵向相反方向的纵向 |
sensorLandscape | 仅仅能是横向,可是能够依据重力感应来决定是正常的还是反转的横向 |
sensorPortrait | 中能是纵向。可是能够依据重力感应来决定是正常的或者反转的纵向 |
sensor | 方向由设备方向感应器来决定。显示的方向取决于用户是怎样持有设备的;在用户翻转设备时,方向发生改变。有些设备在默认情况下不会翻转到全部4个可能的方向。要同意可翻转到全部4个方向,能够使用fullSensor |
fullSensor | 方向由设备方向感应为4个方向中的随意一个而确定 |
nosensor | 无感应模式 |
19.android:stateNotNeeded
该属性表明Activity能否被终止以及能否在还没有保存其状态的情况下成功重新启动。
假设Activity能够在不须要引用到之前状态的情况下就能被重新启动,则该属性为true;假设须要引用到之前的状态才干被重新启动。则为false。默认值是false。
通常,在临时关闭Activity之前,我们要调用onSaveInstanceState()方法来保存当前的Activity的状态。该方法在Bundle对象中存储Activity的当前状态,该对象在重新启动Activity时将会以參数的方式传给onCreate()方法。假设该属性被设置为true,则onSaveInstanceState()就不会被调用。而且onCreate()会被传递null。这和Activity首次启动时所做的一样。
20.android:taskAffinity
该属性指明对该Activity有亲和力的任务。有相同亲和力的Activity在概念上属于同一任务(默认情况下是应用程序所定义的任务)。任务的亲和力是由其根Activity的亲和力所决定的。
21.android:theme
该属性是指为Activity定义一个总体主题风格资源的引用。
所谓的风格包含字体种类,总体样式等。使用该属性能够使得我们的Activity在总体上更为统一,美观。
假设没有设置该属性,则Activity继承将应用程序作为一个总体而设置的主题。详细可见<application>元素的theme属性。假设theme属性也没有设置,则使用默认系统主题。
22.android:windowSoftInputMode
该属性表示Activity的主窗体怎样与包括屏幕软键盘的窗体交互。
设置该属性将影响两件事。
①软键盘的状态。当Activity获取输入焦点时,是否隐藏软键盘。
②对Activity主窗体的调整。该窗体是否被调整得更小一些来为软键盘腾出空间,或者它的内容是否被移动以便在部分窗体被软键盘覆盖时,使得当前焦点可见。
该属性或者是下表的一个值,或者是state...值和adjust...值的组合。假设是多个值的组合。则使用(|)将其隔开,比如
<activity android:windowSoftInputMode="stateVisible|adjustResize" .....>
这里设置的值(stateVisible和adjustResize)覆盖了设置在主题中的值。
值 | 描写叙述 |
stateUnspecified | 没有指定的软键盘(是否隐藏或者可见)的状态。
系统将选择一个合适的状态或者依赖主题中的定义来设置。这对于软键盘的行为是默认设置。 |
stateUnchanged | 软键盘保持在它最后存在的不论什么状态中 |
stateHidden | 在用户选择Activity时,软键盘是可见的 |
stateAlwaysHidden | 当Activity有输入焦点时(比方编辑框获得焦点的时候),软键盘总是隐藏的。 |
stateVisible | 当用户进入Activity的主窗体时,软键盘是可见的 |
stateAlwaysVisible | 当用户选择Activity时。软键盘可见 |
adjustUnspecified | Activity的主窗体是否调整尺寸来为软键盘腾出空间 |
adjustResize | Activity的主窗体总是被调整来为屏幕上的软键盘腾出空间 |
adjustPan | Activity的主窗体不会被调整为屏幕上的软键盘腾出空间 |
Android清单文件具体解释(六) ---- <activity>节点的属性的更多相关文章
- Android清单文件具体解释(三)----应用程序的根节点<application>
<application>节点是AndroidManifest.xml文件里必须持有的一个节点,它包括在<manifest>节点下.通过<application>节 ...
- Android清单文件具体解释(二) ---- 应用程序权限声明
我们知道,Android系统的各个模块提供了很强大的功能(比方电话,电源和设置等),通过使用这些功能.应用程序能够表现的更强大.更灵活.只是,使用这些功能并非无条件的.而是须要拥有一些权限.接下来,我 ...
- Android清单文件具体解释(四) ---- backupAgent的使用方法
在<application>节点中有一个很重要的属性,那就是backupAgent.这里我们将它单独列出来,从基本含义,使用方法及其相关属性等方面来具体介绍一下. 1.backupAgen ...
- [android]清单文件中MAIN与LAUNCHER的区别
原文:[android]清单文件中MAIN与LAUNCHER的区别 MAIN 和 LAUNCHER,之前一直不注意这两个有区别,写程序的时候都放到一个filter中,前两天面试问到了,总结一下: MA ...
- Android ---------- 清单文件中Activity常规设置
<activity android:name="xxxxx" android:alwaysRetainTaskState="true" android:c ...
- Android清单文件详解(三)----应用程序的根节点<application>
<application>节点是AndroidManifest.xml文件中必须持有的一个节点,它包含在<manifest>节点下.通过<application>节 ...
- Android清单文件AndroidMenifest.xml
1.AndroidMenifes.xml清单文主要结构件结构 所谓主要结构就是每一个清单文件中都必不可少的结构主要是下面三层 第一层.menifest 第二层.application,use-sdk ...
- Android清单文件合并的那些事
APK文件只能包含一个AndroidManifest.xml文件,但Android Studio项目可以包含多个文件(通过buildSrc.导入的库引入).因此,在构建应用时,Gradle构建会将所有 ...
- (备忘)android清单文件中<meta-data>标签,以及<intent-filter>下的<data>标签及其他标签
1.metadata可以写在application下也可以写在activity下,作为全局或activity内共享的数据 以键值对形式保存 <meta-data android:name=&qu ...
随机推荐
- ajax简单操作,验证用户名是否可以
分别使用get,post方法进行提交. 如果输入用户名为admin时,鼠标失去焦点,显示不可以. <!DOCTYPE html> <html lang="en"& ...
- jquery中的jsonp跨域调用
jquery jsonp跨域调用接口
- 浅谈密码加SALT原理
我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码. 加Salt可以一定程度上解决这一问题.所谓加Salt方法, ...
- 华硕VX50V开机老是进入bios
问题:华硕VX50V开机老是进入bios 如图: 解决办法: 1.将 Boot 中的--->> Lunch CSM ---->>设置为 -->> ena ...
- Linux下的进程环境
僵尸进程.孤儿进程.守护进程.进程组.会话.前台进程组.后台进程组 1,僵尸进程 子进程结束,父进程没有明确的答复操作系统内核:已收到子进程结束的消息.此时操作系统内核会一直保存该子进程的部分PCB信 ...
- WPF silverlight获取子控件(获取DataTemplate里的子控件)
public static class VisualTreeExtensions { /// <summary> /// 获取父节点控件 /// </summary> /// ...
- BZOJ 1057: [ZJOI2007]棋盘制作 悬线法求最大子矩阵+dp
1057: [ZJOI2007]棋盘制作 Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑 ...
- zzuoj--10401--物资调度(dfs)
A.物资调度 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 93 Solved: 52 [Submit][Status][Web Board] De ...
- ECharts 在winform中使用(访问JS)
ECharts 是百度的一个开源chart 数据统计库,采用html5 + js 编程方式. 有比较好的动态效果,功能很强大.能做出酷弦的效果. ECharts 一般用于web 开发.但winform ...
- Kali linux 2016.2(Rolling)中的Metasploit如何更新与目录结构初步认识
如何更新MSF 1.Windows平台 方法1: 运行msfupdate.bat 在msfconsole里执行命令svn update 或者 方法2: 2.unix/linux平台 方法1: 运行m ...