【问题标题】:Android Task vs. Activity - What are they "really"?Android 任务与活动 - 它们“真正”是什么?
【发布时间】:2019-08-19 14:45:47
【问题描述】:

我正在尝试了解 Android 任务与“幕后”活动以进行调试(以及我的启发)。许多其他 StackOverflow 答案和 Android 文档以详细但抽象的方式解决了这个问题。他们是什么真的?我的(可能不正确的)理论如下:

(1) “任务”是多线程 Linux 进程,(2) 活动是该进程中的一个线程,用于为活动提供服务。

这是准确的还是我偏离了基地?

2019 年 8 月 21 日更新 到目前为止,大多数答案都没有解决我的问题。它们只是呼应了 Android Doc 中对抽象的描述。我发现 Android 框架极不可能包含 Linux 内核中已经存在的进程管理工具,例如进程、pthread 等。 恕我直言,Android 活动和任务是围绕 Linux 功能的包装器。我很确定我的理论中的(1)是正确的,但我不确定(2)。有没有人真正了解这些抽象背后的原理?

【问题讨论】:

  • “一个“任务”是一个多线程的 Linux 进程”——不。任务更接近于 Web 浏览器选项卡。它是一个回栈活动的记录。 “并且活动是该进程中为活动提供服务的线程” - 不。 Activity 是一个 Java 对象,代表 Android UI 的主要单元。

标签: android android-activity task


【解决方案1】:

Tasks 是只是堆栈,其中包含Activities。同样Activities 只需持有 UI 并成为该堆栈的一部分。来源: Tasks and the Back Stack (Android Development Patterns)

同样适用于Activities 中的Fragments。就像它们是Activity backstack 的一部分一样,Activity 也是称为Task(s) 的堆栈的一部分。

当您按下概览按钮或主页按钮时,您看到的不是Activity,而是顶部带有最新ActivityTask。来源: Single Activity, why , when and how.

所以回答你的问题:

这是准确的还是我偏离了基地?

这是在 Linux 中使用的概念,与 Android 无关(即使 Android 是 Linux)。如此不同的概念,相同的命名。

【讨论】:

    【解决方案2】:

    活动不是线程。完全没有。 Activity 是 UI 的控制器。基本上它是协调屏幕或工作流程的代码。它没有附加线程(但某些函数在被框架调用时保证在主线程上运行(并且您不应该直接调用它们)。

    一个任务。 AsyncTask 基本上是 Thread 的包装器,在 UI 线程上运行 pre 和 post 函数(以及向 UI 发送可选的定期更新消息)。

    还有另一个任务,它只是一组活动,您可以使用后退按钮导航回来。将其视为用户通过您的应用程序的路径。但是您很少会使用这个概念,它主要是自动化的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      相关资源
      最近更新 更多