在一个Android应用中,可以通过四种方式配置Activity的启动,其中最容易混淆的是“singleTask”方法,官方文档说Activity启动于这种方式总是属于一个任务的根Activity。真的是这样吗?本文将为您解开Activity的“singleTask”之谜。在解开这个谜团之前,我们先来简单了解一下Android应用程序中任务是一个什么样的概念。我们知道Activity是Android应用程序的基本组件之一。当应用程序运行时,每个Activity代表一个用户操作。用户为完成某个功能而进行的一系列操作构成了一个Activity序列,在Android应用中称为任务。它从用户体验的角度将一组相关的活动组织在一起。和抽象的概念。对于初学者来说,在开发Android应用时,任务的概念可能不是那么直观。通常,我们只关注如何在应用程序中实现每个Activity。其实Android系统中的任务更多的是在应用程序运行的时候体现出来,所以相对于Activity来说它是动态存在的,这也是为什么我们在开发的时候对于任务的概念没有那么直观的原因。但是,我们在开发Android应用的时候,仍然可以配置Activity的任务属性,即告诉系统它是应该在一个新的任务中启动,还是在一个已经存在的任务中启动,或者其他Activity是否可以共享与它相同的任务。具体配置请参考官方文档:http://developer.android.com/gui...and-back-stack.html是这样介绍“singleTask”模式启动的Activity的:任务并在新任务的根实例化活动。但是,如果活动的实例已存在于单独的任务中,则系统会通过调用其onNewIntent()方法将意图路由到现有实例,而不是创建新实例。一次只能存在一个活动实例。里面明确写明了“singleTask”模式启动的Activity实例全局只存在一个,所以当我们***第一次启动这个Activity时,系统会新建一个task,并初始化这样一个实例活动,并将其放在新任务的底部。将调用此Activity实例的onNewIntent成员函数来激活它。从这句话可以推断,以“singleTask”模式启动的Activity始终属于某个任务的根Activity。但是文档接着举了一个例子来说明,当用户按下键盘上的返回键时,如果前台运行的任务栈顶是一个“singleTask”Activity,系统会返回到下一个Activity当前的任务,而不是回到之前的Activity,如下图所示:真是作弊!有木头!刚才说“singleTask”会运行在一个新的任务中,并且在任务栈的底部,这里是TaskB,一个标有“singleTask”的裸箭头无情地指向了TaskB栈顶部的ActivityY,转身就否定了任何人!狮子屎总比熊屎好,我们来做个实验,看看在启动这个“singleTask”Activity的时候,是在新任务栈的底部,还是在现有任务的顶部。
