Task和Back堆栈之间的关系是什么?

当我读到Android官方文档时,我注意到Android系统通过任务来pipe理活动,但是它也使用后退堆栈来控制活动序列。所以我怀疑android系统是否使用单个后退堆栈来控制活动序列或者每个任务对应一个后退栈?

任务只是一个应用程序的所有实例化活动的集合。

例如:

如果我们有应用程序A的活动A1,A2和A3,A2在A2之后打开A1和A3之后打开,应用程序A的任务如下所示:

|A3| |A2| |A1| 

现在,如果我们按下后退button,A3将popup,A2将显示给用户。 应用程序A的任务现在看起来像这样:

 |A2| |A1| 

如果我们按回去,直到所有的活动都没有了,那么这个任务将被丢弃,下一次我们启动应用程序A时,Android将创build一个新的任务,并且应用程序A的主要活动是第一个活动。

现在,我们再次以相同的顺序打开A1,A2和A3。 应用程序A的任务现在回到:

 |A3| |A2| |A1| 

现在,假设我们按下主页button并启动另一个应用程序,即应用程序B.这将导致应用程序A的整个任务被保留在后台,并为应用程序B创build一个新任务,其主要活动被实例化。 所以现在我们有这样的情况:

 Application A Application B |A3| |B1| |A2| |A1| 

如果我们在应用程序B中打开更多的活动,它们将被添加到它的任务,就像应用程序A:

 Application A Application B |A3| |B3| |A2| |B2| |A1| |B1| 

现在,如果我们切换回应用程序A,我们将把A的任务带到前台,B的任务将保留在后台。

相同任务的多个实例也可以存在于同一个任务中。 这种行为可以被控制 。

如果系统内存不足,将会开始在后台查杀活动。 如果任务的所有活动都消失了,任务也将被销毁。 ( 更新:根据Dianne Hackborn的回答 ,这不是个别的活动,而是承载他们的整个过程被丢弃,在这方面文档可能有点误导,混乱还没有解决。当我得到更可靠的信息时更新它。)

所以,总而言之,一个任务只是一个应用程序活动的集合。 它用于维护应用程序的所有实例化活动的“堆栈”或“后台堆栈”。 当应用程序的所有活动都在后台时,它将保留在后台。 当这些活动中的一个被带回到前台时,任务也被带回,并且当前活动的任务被推到后台。 如果系统需要内存,后台活动和任务可能被破坏。

官方文档给了更多的信息,我build议阅读:

http://developer.android.com/guide/components/tasks-and-back-stack.html

android官方文档看,

任务是用户在执行特定工作时与之交互的一系列活动。 这些活动按照每个活动打开的顺序排列在一个堆栈中(“后退堆栈”)。

我同意它相当混乱。 但是,一遍又一遍地阅读整个文件就变得清楚了。

任务使用后退堆栈来pipe理活动。 除了一些其他的信息和/或数据之外,每个任务都有自己的回栈。 任务使用它的后退堆栈来pipe理活动。

如果我错了,请纠正我。

我不是很了解你想要做什么,但系统中的活动是作为一个活动堆栈进行pipe理的。 当一个新的活动开始,它被放置在堆栈的顶部,并成为正在运行的活动。 之前的活动始终保持在堆栈下方,并且在新活动退出之前不会再次到达前台。

一个Task是这个活动集合,它使用Back Stack将它们(活动)与它们的打开顺序排列在一起。

每个应用程序使用自己的任务 ,该任务使用它自己的后退堆栈