【问题标题】:What is the relationship between Task and Back stackTask和Back stack有什么关系
【发布时间】:2013-06-07 02:49:30
【问题描述】:

看了android官方文档,发现android系统是通过task来管理activity的,但是它也使用back stack来控制activity的顺序。所以我怀疑android系统是否使用单个back stack来控制activity的顺序。控制活动顺序还是每个任务对应一个回栈?

【问题讨论】:

  • 我的意思是android系统中的所有活动顺序由一个回栈控制,或者每个任务中的活动对应一个回栈?

标签: android


【解决方案1】:

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

例如:

如果我们的应用程序 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

【讨论】:

  • 只是一个更正 - 对此存在一些混淆,但似乎不是 activities 会在内存不足时被杀死;它本身就是一个完整的进程。参考:This post 在 Commonsware 博客上
  • @curioustechizen 是的,文档在这方面有点不清楚/误导。
  • 您好,答案很好。但是我有一个问题:在不同任务之间切换时,back stack呢? back stack 是否存在于每个任务或整个 android 框架中?
  • @hguser 任务中的每个活动堆栈都被视为该特定任务的后退堆栈。因此,每个任务都有自己的后台堆栈。
  • 好的,我知道了。谢谢你:)。
【解决方案2】:

android官方文档中写道,

任务是用户在什么时候与之交互的活动的集合 执行某项工作。这些活动被安排在一个堆栈中( “back stack”),按照每个活动的打开顺序。

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

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

如果我错了,请纠正我。

【讨论】:

    【解决方案3】:

    我不太明白您要达到什么目的,但系统中的活动是作为 活动堆栈 进行管理的。当一个新的 Activity 启动时,它被放置在 stack 的顶部并成为正在运行的 Activity。前一个活动在堆栈中始终保持在其下方,并且在新活动退出之前不会再次出现在前台。

    【讨论】:

    • 我想表达的是:android系统只有一个back stack或者back stack的个数等于tasks的count?任务是用户在执行特定工作时与之交互的一系列活动。
    【解决方案4】:

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

    每个应用程序都使用自己的Task,而该任务使用自己的Back Stack

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-24
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      相关资源
      最近更新 更多