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:clearTaskOnLaunc

该属性表明,除了任务中的根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的主窗口不会被调整为屏幕上的软键盘腾出空间

Activity节点的更多相关文章

  1. Android中Activity运行时屏幕方向与显示方式详解

    现在我们的手机一般都内置有方向感应器,手机屏幕会根据所处位置自动进行横竖屏切换(前提是未锁定屏幕方向).但有时我们的应用程序仅限在横屏或者竖屏状态下才可以运行,此时我们需要锁定该程序Activity运 ...

  2. Android开发学习—— activity

    activity生命周期 #Activity生命周期###void onCreate()* Activity已经被创建完毕###void onStart()* Activity已经显示在屏幕,但没有得 ...

  3. Activity系列讲解---Activity运行时的屏幕方向,全屏,窗体模式的设置

    Android内置了方向感应器的支持.Android会根据所处的方向自动在竖屏与横屏间切换.但是有的应用程序只能在横/竖屏时运行,比如某些游戏,此时我们要锁定该Activity运行时的屏幕方向,< ...

  4. 安卓四大组件之activity和获取网络资源之断点续传

    Day05 数据存储及多线程断点续传1.数据提交到服务器两种方式的优缺点* GET请求优点:使用非常方便,只需要在url后面组拼数据.缺点:数据在url的后面组拼,不安全.有数据长度限制.* POST ...

  5. Android 创建一个新的Activity

    本文转载自:http://www.cnblogs.com/wuyudong/p/5658020.html 新建一个项目,创建一个java类,继承自Activity 新建一个Android.xml文件: ...

  6. Activity之多启动图标

    如果想要Activity有多个启动图标,只需要在manifest.xml文件中配置一下就可以了,直接上代码: 1 <application 2 android:allowBackup=" ...

  7. 横竖屏切换时Activity的生命周期

    设置横竖屏切换时Activity生命周期的属性设置,在清单文件中的Activity节点中设置.根据具体需求设置: 1.不设置Activity的android:configChanges时,切屏会重新调 ...

  8. (转载)读取xml中的指定节点的值

            /// <summary>         /// 读取xml中的指定节点的值        /// </summary>         private st ...

  9. Android Activity 详述

    activity类处于android.app包中,继承关系: extends ContextThemeWrapper implements LayoutInflater.Factory2 Window ...

随机推荐

  1. Winform 多项目共用AssemblyInfo解决方案

    Winform 多项目共用AssemblyInfo解决方案: 操作步骤如下: 第一步:复制任何项目中的AssemblyInfo.cs文件至指定目录 第二步:删除所有项目的AssemblyInfo.cs ...

  2. DA_01_linux_物理机局域网工作机制

    一:物理机局域网工作机制: 二:域名服务的工作流程: 首先通过域名映射到IP地址,如果没有找到域名,向外部服务器DNS查询,然后通过IP地址访问服务器: 三:Vmware--NAT虚拟网络配置:

  3. 关于join() 是否会释放锁的一些思考

    # 首先从一个很有意思的问题开始: - 问 : Thread 的join() 方法是否会释放锁? - 答: 会! # 如果一切到这里就结束了,那可能也就没有这篇小记了,但是我的脑子却冒出了一些奇怪的想 ...

  4. selenium八种定位元素方法

    1.driver.find_element_by_id('su') 定位到元素的id一般id是唯一的,可以精确定位到元素 2.driver.find_element_by_name() 通过元素的na ...

  5. [USACO14OPEN]GPS的决斗Dueling GPS's

    题目概况 题目描述 给你一个\(N\)个点的有向图,可能有重边. 有两个\(GPS\)定位系统,分别认为经过边\(i\)的时间为\(P_i\),和\(Q_i\). 每走一条边的时候,如果一个系统认为走 ...

  6. python -m pip install [package] --no-deps

    python -m pip install [package]  --no-deps 有些 packages 会依赖一些其它的 package,当我们离线安装 whl 的时候,就无法联网下载依赖包,所 ...

  7. python+Appium自动化:H5元素定位

    问题思考 在混合开发的App中,经常会有内嵌的H5页面.那么这些H5页面元素该如何进行定位操作呢? 解决思路 针对这种场景直接使用前面所讲的方法来进行定位是行不通的,因为前面的都是基于Andriod原 ...

  8. vuex直接修改state 与 用commit提交mutation来修改state的差异

    一. 使用vuex修改state时,有两种方式: 1)可以直接使用 this.$store.state.变量 = xxx;  2)this.$store.dispatch(actionType, pa ...

  9. Aizu - 1382 Black or White (分段决策,单调队列优化dp)

    题意:给定只有黑白两种颜色的序列A,B,每次可以选择一段连续的长度不超过k的区间将其染成同一种颜色,求把序列A变成B所需的最小操作次数. 首先需要找出一些最优解的特征: 1.如果序列A的第一个颜色和B ...

  10. Jmeter设置集合点(并发测试)

    什么是集合点? 让所有请求在不满足条件的时候处于等待状态. 如何实现? 使用jmeter中的同步计时器Synchronizing Timer来实现 集合点的位置 因为集合点是在取样器sampler(例 ...