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

时间:2013-06-07 02:49:30

标签: android

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

4 个答案:

答案 0 :(得分:17)

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

例如:

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

|A3|
|A2|
|A1|

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

|A2|
|A1|

如果我们按回去直到所有活动都消失,那么任务将被丢弃,下次我们启动应用程序A时,Android将创建一个新任务,将应用程序A的主要活动作为第一个活动。

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

|A3|
|A2|
|A1|

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

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

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

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

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

同一活动的多个实例也可以存在于同一任务中。此行为can be controlled

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

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

官方文档提供了更多信息,我建议阅读它们:

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

答案 1 :(得分:2)

android官方文档读取,

  

任务是用户与之交互的活动的集合   从事某项工作。活动排成一堆(   “后台堆栈”),按照每个活动的开放顺序。

我同意这很令人困惑。但是,一遍又一遍地阅读整个文件就很清楚了。

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

如果我错了,请纠正我。

答案 2 :(得分:0)

我真的不明白你想要达到的目的,但系统中的活动是作为活动堆栈进行管理的。启动新活动时,它将置于堆栈的顶部,并成为正在运行的活动。之前的活动在堆栈中始终保持低于它,并且在新活动退出之前不会再次出现。

答案 3 :(得分:0)

任务是活动的集合,它使用 Back Stack 按照打开顺序排列它们(活动)。

每个应用都使用自己的任务,该任务使用它自己的 Back Stack