1.清单文件中,activity 的属性
android
android:allowTaskReparenting web
这个属性用于设定Activity可以从启动它的任务中转移到另外一个与启动它的任务有亲缘关系的任务中,转移时机是在这个有亲缘关系的任务被带到前台的时候。若是设置了true,则可以转移,若是设置了false,则这个Activity必需要保留在启动它的那个任务中。 浏览器
若是这个属性没有设置,那么其对应的<application>元素的allowTaskReparenting属性值就会应用到这个Activity上。它的默认值是false。 app
一般,当Activity被启动时,它会跟启动它的任务关联,并它的整个生命周期都会保持在那个任务中。可是当Activity的当前任务不在显示时,可使用这个属性来强制Activity转移到与当前任务有亲缘关系的任务中。这种状况的典型应用是把应用程序的Activity转移到与这个应用程序相关联的主任务中。 函数
例如,若是一个电子邮件消息中包含了一个网页的连接,点击这个连接会启动一个显示这个网页的Activity。可是,由e-mail任务部分启动的这个Activity是由浏览器应用程序定义的。若是把它放到浏览器的任务中,那么在浏览器下次启动到前台时,这个网页会被显示,而且在e-mail任务再次显示时,这个Activity有会消失。 spa
Activity的亲缘关系是由taskAffinity属性定义的。经过读取任务的根Activity的亲缘关系来判断任务的亲缘关系。所以,经过定义,任务中的根Activity与任务有着相同的亲缘关系。所以带有singleTask或singleInstance启动模式的Activity只能是任务的根节点,Activity的任务归属受限于standard和singleTop模式。 orm
经典理解:
生命周期
就是说,一个activity1原来属于task1,可是若是task2启动起来的话,activity1可能再也不属于task1了,转而投奔task2去了。
固然前提条件是allowTaskReparenting,还有affinity设置
有点像,你捡到一条狗,在家里喂养几天以为不错,当本身家的了;可是忽然有一天他的主人找上门来了,小狗仍是乖乖和主人走了。。。 it
或者: io
用法
是否容许activity更换从属的任务,好比从短信息任务 切换到浏览器任务。
用来标记Activity可否从启动的Task移动到有着affinity的Task(当这个Task进入到前台时)——“true”,表示能移动,“false”,表示它必须呆在启动时呆在的那个Task里。
若是这个特性没有被设定,设定到元素上的allowTaskReparenting特性的值会应用到Activity上。默认值为“false”。
通常来讲,当Activity启动后,它就与启动它的Task关联,而且在那里耗尽它的整个生命周期。当当前的Task再也不显示时,你可使用这个特性来强制Activity移动到有着affinity的Task中。典型用法是:把一个应用程序的Activity移到另外一个应用程序的主Task中。
例如,若是e-mail中包含一个web页的连接,点击它就会启动一个Activity来显示这个页面。这个Activity是由Browser应用程序定义的,可是,如今它做为e-mail Task的一部分。若是它从新宿主到Browser Task里,当Browser下一次进入到前台时,它就能被看见,而且,当e-mail Task再次进入前台时,就看不到它了。
Actvity的affinity是由taskAffinity特性定义的。Task的affinity是经过读取根Activity的affinity 决定。所以,根据定义,根Activity老是位于相同affinity的Task里。因为启动模式为“singleTask”和 “singleInstance”的Activity只能位于Task的底部,所以,从新宿主只能限于“standard”和“singleTop”模式。
android:alwaysRetainTaskState
这个属性用于设置Activity所属的任务状态是否始终由系统来维护。若是设置为true,则由系统来维护状态,设置为false,那么在某些状况下,系统会容许重设任务的初始状态。默认值是false。这个属性只对任务根节点的Activity有意义,其余全部的Activity都会被忽略。
一般,在某些状况中,当用户从主屏中从新启动一个任务时,系统会先清除任务(从堆栈中删除根节点Activity之上的全部Activity)。
可是,当这个属性被设置为true时,用户会始终返回到这个任务的最后状态,而无论中间经历了哪些操做。这样作是有好处的,例如,Web浏览器的应用就会保留不少用户不想丢失的状态,如多个被打开的标签页。
经典理解:
这个属性用来标记应用的task是否保持原来的状态,“true”表示老是保持,“false”表示不可以保证,默认为“false”。此属性只对task的根Activity起做用,其余的Activity都会被忽略。 默认状况下,若是一个应用在后台呆的过久例如30分钟,用户从主选单再次选择该应用时,系统就会对该应用的task进行清理,除了根Activity,其余Activity都会被清除出栈,可是若是在根Activity中设置了此属性以后,用户再次启动应用时,仍然能够看到上一次操做的界面。 这个属性对于一些应用很是有用,例如Browser应用程序,有不少状态,好比打开不少的tab,用户不想丢失这些状态,使用这个属性就极为恰当。
android:clearTaskOnLaunch
这个属性用于设定在从主屏中重启任务时,处理根节点的Activity之外,任务中的其余全部的Activity是否要被删除。若是设置为true,那么任务根节点的Activity之上的全部Activity都要被清除,若是设置了false,就不会被清除。默认设置时false。这个属性只对启动新任务(或根Activity)的那些Activity有意义,任务中其余全部的Activity都会被忽略。
当这个属性值被设置为true,用户再次启动任务时,任务根节点的Activity就会被显示,而无论在任务的最后作了什么,也无论任务使用Back按钮,仍是使用Home离开的。当这个属性被设置为false时,在某些状况中这个任务的Activity能够被清除,但不老是这样的。
例如,假设某人从主屏中启动了Activity P,而且又从P中启动了Activity Q。接下来用户按下了Home按钮,而后由返回到Activity P。一般用户会看到Activity Q,由于这是在P的任务中所作的最后的事情。可是,若是P把这个属性设置为true,那么在用户按下Home按钮,任务被挂起时,Activity P之上的全部Activity(本例中是Activity Q)都会被删除。所以当用户再次返回到本任务时,用户只能看到Activity P。
若是这个属性和allowTaskReparenting属性都被设置为true,那些被设置了亲缘关系的Activity会被转移到它们共享的亲缘任务中,而后把剩下的Activity都给删除。
经典理解:
这个属性用来标记是否从task清除除根Activity以外的全部的Activity,“true”表示清除,“false”表示不清除,默认为“false”。一样,这个属性也只对根Activity起做用,其余的Activity都会被忽略。 若是设置了这个属性为“true”,每次用户从新启动这个应用时,都只会看到根Activity,task中的其余Activity都会被清除出栈。若是咱们的应用中引用到了其余应用的Activity,这些Activity设置了allowTaskReparenting属性为“true”,则它们会被从新宿主到有共同affinity的task中。
android:finishOnTaskLaunch
这个属性和android:allowReparenting属性类似,不一样之处在于allowReparenting属性是从新宿主到有共同affinity的task中,而finishOnTaskLaunch属性是销毁实例。若是这个属性和android:allowReparenting都设定为“true”,则这个属性好些。
android:configChanges
在Activity中添加了 android:configChanges属性,目的是当所指定属性(Configuration Changes)发生改变时,通知程序调用 onConfigurationChanged()函数。