Android Task和Activity相关复习进程.docx

上传人:b****2 文档编号:1820554 上传时间:2022-10-24 格式:DOCX 页数:12 大小:25.54KB
下载 相关 举报
Android Task和Activity相关复习进程.docx_第1页
第1页 / 共12页
Android Task和Activity相关复习进程.docx_第2页
第2页 / 共12页
Android Task和Activity相关复习进程.docx_第3页
第3页 / 共12页
Android Task和Activity相关复习进程.docx_第4页
第4页 / 共12页
Android Task和Activity相关复习进程.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Android Task和Activity相关复习进程.docx

《Android Task和Activity相关复习进程.docx》由会员分享,可在线阅读,更多相关《Android Task和Activity相关复习进程.docx(12页珍藏版)》请在冰豆网上搜索。

Android Task和Activity相关复习进程.docx

AndroidTask和Activity相关复习进程

 

AndroidTask和Activity相关

1Task和Activity相关

作者:

xirihanlin  来源:

博客园  发布时间:

2010-06-0315:

36  阅读:

507次  原文链接   [收藏]  

这段时间在做一个项目,发现对Task和Activity掌握的还是不牢固。

把相关知识整理在这里,方便查阅,有几个Flag没看明白啥意思,也没测试出来效果如何。

 

 android:

allowTaskReparenting

   用来标记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-mailTask的一部分。

如果它重新宿主到BrowserTask里,当Browser下一次进入到前台时,它就能被看见,并且,当e-mailTask再次进入前台时,就看不到它了。

   Actvity的affinity是由taskAffinity特性定义的。

Task的affinity是通过读取根Activity的affinity决定。

因此,根据定义,根Activity总是位于相同affinity的Task里。

由于启动模式为“singleTask”和“singleInstance”的Activity只能位于Task的底部,因此,重新宿主只能限于“standard”和“singleTop”模式。

android:

alwaysRetainTaskState

   用来标记Activity所在的Task的状态是否总是由系统来保持——“true”,表示总是;“false”,表示在某种情形下允许系统恢复Task到它的初始化状态。

默认值是“false”。

这个特性只针对Task的根Activity有意义;对其它Activity来说,忽略之。

   一般来说,特定的情形如当用户从主画面重新选择这个Task时,系统会对这个Task进行清理(从stack中删除位于根Activity之上的所有Activivity)。

典型的情况,当用户有一段时间没有访问这个Task时也会这么做,例如30分钟。

   然而,当这个特性设为“true”时,用户总是能回到这个Task的最新状态,无论他们是如何启动的。

这非常有用,例如,像Browser应用程序,这里有很多的状态(例如多个打开的Tab),用户不想丢失这些状态。

android:

clearTaskOnLaunch

   用来标记是否从Task中清除所有的Activity,除了根Activity外(每当从主画面重新启动时)——“true”,表示总是清除至它的根Activity,“false”表示不。

默认值是“false”。

这个特性只对启动一个新的Task的Activity(根Activity)有意义;对Task中其它的Activity忽略。

   当这个值为“true”,每次用户重新启动这个Task时,都会进入到它的根Activity中,不管这个Task最后在做些什么,也不管用户是使用BACK还是HOME离开的。

当这个值为“false”时,可能会在一些情形下(参考alwaysRetainTaskState特性)清除Task的Activity,但不总是。

   假设,某人从主画面启动了ActivityP,并从那里迁移至ActivityQ。

接下来用户按下HOME,然后返回ActivityP。

一般,用户可能见到的是ActivityQ,因为它是P的Task中最后工作的内容。

然而,如果P设定这个特性为“true”,当用户按下HOME并使这个Task再次进入前台时,其上的所有的Activity(在这里是Q)都将被清除。

因此,当返回到这个Task时,用户只能看到P。

   如果这个特性和allowTaskReparenting都设定为“true”,那些能重新宿主的Activity会移动到共享affinity的Task中;剩下的Activity都将被抛弃,如上所述。

android:

finishOnTaskLaunch

   用来标记当用户再次启动它的Task(在主画面选择这个Task)时已经存在的Activity实例是否要关闭(结束)——“true”,表示应该关闭,“false”表示不关闭。

默认值是“false”。

   如果这个特性和allowTaskReparenting都设定为“true”,这个特性胜出。

Activity的affinity忽略。

这个Activity不会重新宿主,但是会销毁。

android:

launchMode

   用于指示Activity如何启动。

这里有四种模式,与Intent对象中的ActivityFlags(FLAG_ACTIVITY_*变量)共同作用,来决定Activity如何启动来处理Intent。

它们是:

   "standard"

   "singleTop"

   "singleTask"

   "singleInstance"

   默认模式是“standard”。

   

   这些模式可以分成两大组别,“standard”和“singleTop”一组,“singleTask”和“singleInstance”一组。

具有“standard”和“singleTop”启动模式的Activity可以实例化很多次。

这些实例可以属于任何Task并且可以位于Activitystack的任何位置。

典型的情况是,它们会进入调用startActivity()的Task(除非Intent对象包含FLAG_ACTIVITY_NEW_TASK标志,在这种情况下会选择一个不同的Task——参考taskAffinity特性)。

   相反的,“singleTask”和“singleInstance”只能启动一个Task。

它们总是位于Activitystack的底部。

甚至,设备一次只能拥有一个Activity的实例——只有一个这样的Task。

   “standard”和“singleTop”模式只在一种情况下有差别:

每次有一个新的启动“standard”Activity的Intent,就会创建一个新的实例来响应这个Intent。

每个实例处理一个Intent。

相似的,一个“singleTop”的Activity实例也有可能被创建来处理新的Intent。

然而,如果目标Task已经有一个存在的实例并且位于stack的顶部,那么,这个实例就会接收到这个新的Intent(调用onNewIntent());不会创建新的实例。

在其他情况下——例如,如果存在的“singleTop”的Activity实例在目标Task中,但不是在stack的顶部,或者它在一个stack的顶部,但不是在目标Task中——新的实例都会被创建并压入stack中。

   “singleTask”和“singleInstance”模式也只在一种情况下有差别:

“singleTask”Activity允许其它Activity成为它的Task的部分。

它位于Activitystack的底部,其它Activity(必须是“standard”和“singleTop”Activity)可以启动加入到相同的Task中。

“singleInstance”Activity,换句话说,不允许其它Activity成为它的Task的部分。

它是Task中的唯一Activity。

如果它启动其它的Activity,这个Activity会被放置到另一个task中——好像Intent中包含了FLAG_ACTIVITY_NEW_TASK标志。

android:

noHistory

   用于标记当用户从Activity上离开并且它在屏幕上不再可见时Activity是否从Activitystack中清除并结束(调用finish()方法)——“true”,表示它应该关闭,“false”,表示不需要。

默认值是“false”。

   “true”值意味着Activity不会留下历史痕迹。

因为它不会在Activitystack的Task中保留,因此,用户不能返回它。

android:

taskAffinity

  Activity为Task拥有的一个affinity。

拥有相同的affinity的Activity理论上属于相同的Task(在用户的角度是相同的“应用程序”)。

Task的affinity是由它的根Activity决定的。

 

  affinity决定两件事情——Activity重新宿主的Task(参考allowTaskReparenting特性)和使用FLAG_ACTIVITY_NEW_TASK标志启动的Activity宿主的Task。

   默认情况,一个应用程序中的所有Activity都拥有相同的affinity。

捏可以设定这个特性来重组它们,甚至可以把不同应用程序中定义的Activity放置到相同的Task中。

为了明确Activity不宿主特定的Task,设定该特性为空的字符串。

   如果这个特性没有设置,Activity将从应用程序的设定那里继承下来(参考元素的taskAffinity特性)。

应用程序默认的affinity的名字是元素中设定的package名。

FLAG_ACTIVITY_BROUGHT_TO_FRONT 

   这个标志一般不是由程序代码设置的,如在launchMode中设置singleTask模式时系统帮你设定。

FLAG_ACTIVITY_CLEAR_TOP

   如果设置,并且这个Activity已经在当前的Task中运行,因此,不再是重新启动一个这个Activity的实例,而是在这个Activity上方的所有Activity都将关闭,然后这个Intent会作为一个新的Intent投递到老的Activity(现在位于顶端)中。

   例如,假设一个Task中包含这些Activity:

A,B,C,D。

如果D调用了startActivity(),并且包含一个指向ActivityB的Intent,那么,C和D都将结束,然后B接收到这个Intent,因此,目前stack的状况是:

A,B。

   上例中正在运行的ActivityB既可以在onNewIntent()中接收到这个新的Intent,也可以把自己关闭然后重新启动来接收这个Intent。

如果它的启动模式声明为“multiple”(默认值),并且你没有在这个Intent中设置FLAG_ACTIVITY_SINGLE_TOP标志,那么它将关闭然后重新创建;对于其它的启动模式,或者在这个Intent中设置FLAG_ACTIVITY_SINGLE_TOP标志,都将把这个Intent投递到当前这个实例的onNewIntent()中。

   这个启动模式还可以与FLAG_ACTIVITY_NEW_TASK结合起来使用:

用于启动一个Task中的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1