activity 的属性android:taskAffinity和android:allowTask

1.清单文件中,activity 的属性

android:allowTaskReparenting

这个属性用于设定Activity能够从启动它的任务中转移到另一个与启动它的任务有亲缘关系的任务中,转移时机是在这个有亲缘关系的任务被带到前台的时候。如果设置了true,则能够转移,如果设置了false,则这个Activity必须要保留在启动它的那个任务中。

如果这个属性没有设置,那么其对应的<application>元素的allowTaskReparenting属性值就会应用到这个Activity上。它的默认值是false。

通常,当Activity被启动时,它会跟启动它的任务关联,并它的整个生命周期都会保持在那个任务中。但是当Activity的当前任务不在显示时,可以使用这个属性来强制Activity转移到与当前任务有亲缘关系的任务中。这种情况的典型应用是把应用程序的Activity转移到与这个应用程序相关联的主任务中。

例如,如果一个电子邮件消息中包含了一个网页的链接,点击这个链接会启动一个显示这个网页的Activity。但是,由e-mail任务部分启动的这个Activity是由浏览器应用程序定义的。如果把它放到浏览器的任务中,那么在浏览器下次启动到前台时,这个网页会被显示,并且在e-mail任务再次显示时,这个Activity有会消失。

Activity的亲缘关系是由taskAffinity属性定义的。通过读取任务的根Activity的亲缘关系来判断任务的亲缘关系。因此,通过定义,任务中的根Activity与任务有着相同的亲缘关系。因此带有singleTask或singleInstance启动模式的Activity只能是任务的根节点,Activity的任务归属受限于standard和singleTop模式。

经典理解:

就是说,一个activity1原来属于task1,但是如果task2启动起来的话,activity1可能不再属于task1了,转而投奔task2去了。
当然前提条件是allowTaskReparenting,还有affinity设置
有点像,你捡到一条狗,在家里喂养几天觉得不错,当自己家的了;但是突然有一天他的主人找上门来了,小狗还是乖乖和主人走了。。。

或者:

用法

是否允许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()函数。

时间: 2024-12-22 01:11:32

activity 的属性android:taskAffinity和android:allowTask的相关文章

Android Activity标签属性

Android Activity标签属性 Activity 是 Android 系统四大应用组件之一,用户可与 Activity 提供的屏幕进行交互,以执行拨打电话.拍摄照片.发送电子邮件等操作开发者必须在清单文件中声明要使用的 Activity,这样系统才能访问它.声明方式是在 < application > 元素中添加 < activity > 子元素 1 <application 2 android:allowBackup="true" 3 andr

解决Activity启动黑屏及设置android:windowIsTranslucent不兼容activity切换动画问题

From:http://blog.csdn.net/fancylovejava/article/details/39643449 之前在做 APP 的时候不太关注这个问题,因为自己在使用其他 APP 的时候也会在应用启动的初始有一个黑屏闪过后才会出现应用的欢迎页.直到最近开发过程中发现自己在欢迎页启动的线程由于请求和处理的数据量过大而,导致欢迎页在出现之前界面上会有一个短暂的白色闪屏停留,当然白色闪屏的停留是因为 application 的主题样式 android:theme="@style/A

Android学习路径——Android的四个组成部分activity(一)

一.什么是Activity? Activity简单的说就是一个接口.我们是Android手机上看到的每个界面就是一个activity. 二.Activity的创建 1.定义一个类继承activity,然后在清单文件manifest.xml文件的application节点下注冊activity.这个activity就创建成功了. public class MyActivity extends Activity { } 2.清单文件注冊activity <application android:al

【Android开发经验】android:windowSoftInputMode属性具体解释

本文章来自CSDN博客:http://blog.csdn.net/zhaokaiqiang1992.转载请注明地址! 在前面的一篇文章中,简单的介绍了一下怎样实现软键盘不自己主动弹出,使用的方法是设置android:windowSoftInputMode属性. 那么,这个属性究竟是干什么的,他有什么作用呢?今天这篇文章.就是探索android:windowSoftInputMode属性的作用的. 首先,我们从这个属性的名称中,能够非常直观的看出它的作用,这个属性就是来设置窗体软键盘的交互模式的.

android开发之android:process属性_application中onCreate执行多次

应用做的匆忙,很多地方只顾实现功能,没有兼顾好性能,所以停下来重构代码优化性能,结果在打log看启动时间的时候,发现 Application的onCreate执行了多次,这样导致重复初始化资源,初始化了3次导致接近1s时间. 发现这个是由独立进程引起的.即:process这个属性. android:process 服务所在进程的名字.通常,一个应用的所有组件都运行在系统为这个应用所创建的默认进程中.这个默认进程是用这个应用的包名来命名的. 标签的process属性可以设置成和所有组件都不同的默认

android.animation(7) - android:animateLayoutChanges属性和LayoutTransition

前篇给大家讲了LayoutAnimation的知识,LayoutAnimation虽能实现ViewGroup的进入动画,但只能在创建时有效.在创建后,再往里添加控件就不会再有动画.在API 11后,又添加了两个能实现在创建后添加控件仍能应用动画的方法,分别是android:animateLayoutChanges属性和LayoutTransition类.这篇文章就来简单说一下他们的用法.由于他们的API 等级必须>=11,API等级稍高,且存在较多问题,并不建议读者使用,本篇只讲解具体用法,不做

Android相关属性的介绍:android:exported = true

在Activity中该属性用来标示:当前Activity是否可以被另一个Application的组件启动:true允许被启动:false不允许被启动. android:exported 是Android中的四大组件 Activity,Service,Provider,Receiver 四大组件中都会有的一个属性. 总体来说它的主要作用是:是否支持其它应用调用当前组件. 例如: <activity android:exported="true" …/> 注意: Android

Android - 控件android:ems属性

控件android:ems属性 本文地址:http://blog.csdn.net/caroline_wendy xml中android:ems属性,作为EditText默认生成的属性,其含义是需要编辑的字符串长度. 设置为10时,最多编辑10个em,一个em单位是两个inch,但是随着自动调整,在Android中em代表'M'的数量. 但是EditText的属性,只有在android:layout_width="wrap_content"时,才会显示: 如果是android:layo

【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性

在进行UI布局的时候,可能常常会用到 android:gravity  和 android:layout_Gravity 这两个属性. 关于这两个属性的差别,网上已经有许多人进行了说明,这边再简单说一下. (资料来自网络) LinearLayout有两个很类似的属性: android:gravity与android:layout_gravity. 他们的差别在于: android:gravity 属性是对该view中内容的限定.比方一个button 上面的text. 你能够设置该text 相对于