在android中,Activity的属性可以在Manifext中的application notes进行可视化设置,也可以在AndroidManifest.xml的代码中进行设置,还能够利用
Intent的标志进行设置。下面我就来介绍android的几种Managing Tasks属性。
1.taskAffinitytaskAffinity 属性就是确定activity的归属与哪个task(activity 栈),一般情况下,我们开启一个应用都会创建一个activity的task,这个应用所启动的所有
activity都会在这个task中度过自己的生命周期。但是为什么我们开启一个应用时activity会找到属于自己的task呢,它是根据什么来找的?默认情况下
如果一个没有显示设置自己的taskAffinity属性,那么在启动一个activity时,系统会其找到application中的affinity属性,如果application也没有显式设
置这个属性,那么系统会将affinity属性默认为该应用的包名。在这里我有个疑问:如果affinity属性中的task不存在会怎么办?在应用刚开始启动的时
候,这个属性中所标注的task肯定不存在,那么系统是怎样创建这个task的?
二:android:launchMode这个属性默认为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掉。