Activity 的Managing Tasks属性

在android中,Activity的属性可以在Manifext中的application notes进行可视化设置,也可以在AndroidManifest.xml的代码中进行设置,还能够利用

Intent的标志进行设置。下面我就来介绍android的几种Managing Tasks属性。

1.taskAffinity
2.launchMode
3.allowTaskReparenting
4.clearTaskOnLaunch
5.alwaysRetainTaskState
6.finishOnTaskLaunch

一:android:taskAffinity

taskAffinity 属性就是确定activity的归属与哪个task(activity 栈),一般情况下,我们开启一个应用都会创建一个activity的task,这个应用所启动的所有

activity都会在这个task中度过自己的生命周期。但是为什么我们开启一个应用时activity会找到属于自己的task呢,它是根据什么来找的?默认情况下

如果一个没有显示设置自己的taskAffinity属性,那么在启动一个activity时,系统会其找到application中的affinity属性,如果application也没有显式设

置这个属性,那么系统会将affinity属性默认为该应用的包名。在这里我有个疑问:如果affinity属性中的task不存在会怎么办?在应用刚开始启动的时

候,这个属性中所标注的task肯定不存在,那么系统是怎样创建这个task的?

二:android:launchMode
launchMode 这个属性比较重要,既可以在application notes中进行设置又能够在Intent中进行设置 notes中的分为以下四类:
"standard" 
"singleTop" 
"singleTask" 
"singleInstance"
Intent中可以设置的属性为:
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP
这些属性我就不细讲了,以后为专门写一篇文章来进行说明。

三:android:allowTakReprenting

这个属性默认为false。如果设置为true他的作用是,如果这个activity启动时,他会自动归属到taskAffinity属性中所设置的activity task,如果

taskAffinity属性名称中的task不存在,他会默认归属于默认task中去,但是如果一旦taskAffinity属性名称中的task被创建并且成为前台task,那么

这个activity又会默认归属到这个task中去。比如:你在某应用中浏览一个链接,使用浏览器打开这个链接会开启一个activity,如果这个属性设置

为true,那么他会归属到浏览器的任务中,当你将这个应用放到后台,然后重新打开浏览器你会发现这个网页还是会被显示。着就是他的作用。

四:android:clearTaskOnTouch

这个属性默认为false。如果设置为true时,打开A activity 然后右从A中启动B,然后按住home键将B放在后台,然后在home scream 中启动A,

按照平常习惯看到的应该还是B,但是这时看到的确是A。他的作用就是,当你离开了设置这个属性的activity,也就是这个activity进入了后台或

者死亡,当这个activity所处的task再次进入前台时,我会始终会看见这个task中的root activity。

五:android:alwaysRetainTaskState

这个属性默认为false。这个属性用来标记应用的task是否保持原来的状态,“true”表示总是保持,“false”表示不能够保证,默认为“false”。此属性

只对task的根Activity起作用,其他的Activity都会被忽略。 默认情况下,如果一个应用在后台呆的太久例如30分钟,用户从主选单再次选择该应用时

系统就会对该应用的task进行清理,除了根Activity,其他Activity都会被清除出栈,但是如果在根Activity中设置了此属性之后,用户再次启动应用时,

仍然可以看到上一次操作的界面。 这个属性对于一些应用非常有用,例如Browser应用程序,有很多状态,比如打开很多的tab,用户不想丢失这些

状态,使用这个属性就极为恰当。

六:android:finishOnTaskTouch

这个属性默认为false。他的作用就是,每当用户点击home screen 再次启动一个应用时(注意:chooses the task on the home screen),这个应用

中所有这个属性被设置为true的Activity都将被finish,包括root Activity。但是开启这个Activity时,然后将这个activity所在的task变成后台 task后,再次

此task将其变成前台task时这个activity就会被finish掉。

你可能感兴趣的:(Activity 的Managing Tasks属性)