任务只是应用程序的所有实例化活动的集合。
例如:
如果我们的应用程序 A 具有活动 A1、A2 和 A3,并且 A2 在 A1 之后打开,A3 在 A2 之后打开,则应用程序 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