【问题标题】:Difference between task and process in AndroidAndroid中任务和进程的区别
【发布时间】:2011-02-08 18:02:34
【问题描述】:

我对 Android 中的任务和进程之间的区别有点困惑。

如果我理解正确,任务只是一堆活动。从我目前阅读的内容来看,我认为一项任务可能如下所示:

| Activity A running in Process P1 |
| Activity B running in Process P2 |
| Activity C running in Process P3 |

所以基本上来自不同进程的活动可以包含在同一个堆栈中。我说的对吗?

另一个问题:“应用程序上下文”的真正含义是什么?过程还是任务?

还有最后一个问题:应用程序类(基本上是一个单例)代表进程还是任务?

【问题讨论】:

    标签: android


    【解决方案1】:

    我所学到的一切,我都在这个page.上学到了

    编辑:我还偶然发现了Activity and Task Design Guidelines. 它似乎涵盖了您所询问的确切主题。我学到了很多:)

    所以基本上来自不同的活动 进程可以包含在同一个 堆。我说的对吗?

    根据我的理解,您是正确的。我的理解是,流程是实际执行的单元,而任务是关于完成事情的关联。作为上述页面的示例,如果您创建打开网页的意图,则它创建的 Activity 是在 Web 浏览器进程上创建的,但与您的应用程序任务相关联。因此,一个任务变成了一个虚拟的 Activity 堆栈,在不同的进程上运行,具体取决于提供 Activity 的应用程序。


    另一个问题:什么是真实的 “应用程序上下文”的含义?这 过程还是任务?

    这是个好问题。根据阅读上面的页面,我的理解是应用程序上下文与流程相关联。我基于该页面对这一行的解释,但可能还有其他信息:

    通常,一个新的实例 活动被启动到流程中 定义它的应用程序,所以 活动的所有实例都在其中运行 同一个过程


    最后一个问题:应用程序 类(基本上是一个单例) 代表过程还是任务?

    使用与上述相同的解释,我猜为什么 Application 对象表示 Singleton 是因为您的所有应用程序活动都在单个进程上运行,并且该进程与应用程序相关联。我不知道这是一个设计点,但它似乎至少是当前设计的结果。

    编辑:对此有一些警告。看来您的应用程序可以分布在多个进程中,所以我的猜测是应用程序对象和上下文充当将所有进程绑定在一起的机制。我很确定您的心智模型已经允许这样做,假设进程来自不同的应用程序,因此允许它在单个进程中只有很小的区别。

    manifest元素有属性android:process,描述如下:

    名称 活动应进行的过程 跑步。通常,一个组件的所有组件 应用程序在默认进程中运行 为应用程序创建。它有 与应用程序同名 包裹。要素 进程属性可以设置不同的 所有组件的默认值。但是每一个 组件可以覆盖默认值, 让你传播你的 跨多个进程的应用程序。 如果分配给此属性的名称 以冒号 (':') 开头,新的 进程,私有的应用程序, 在需要时创建,并且 活动在该过程中运行。如果 进程名以小写字母开头 字符,活动将在一个 该名称的全局进程,提供 它有权这样做。这 允许不同的组件 共享进程的应用程序, 减少资源使用。

    【讨论】:

    • 您提供的信息非常丰富,谢谢。大多数这些东西并不是制作好的应用程序所必需的,但我喜欢了解“幕后”的东西。我在内核空间编程方面有一些经验,所以如果我不知道确切发生了什么,我就睡不好:D
    • 如果您将应用程序实现为跨越多个进程(使用 android:process),如果 Application 对象将跨越多个进程,我会感到惊讶。我认为 Application 类只是有一个不好的名字,它应该被命名为“Process”。
    • @Dibyehdu “创建的活动是在网络浏览器中创建的”是正确的英文。在第一个“被创建”之后用逗号阅读它
    • Ricky 是对的,如果您的活动被定义为在不同的进程中运行,那么它们将不会共享“应用程序对象”
    • 如果您的应用分布在多个进程中,您将拥有Application 对象的多个独立副本,以及所有static 字段的独立副本。
    【解决方案2】:

    流程: 当一个应用程序组件启动并且该应用程序没有任何其他组件在运行时,Android 系统会为该应用程序启动一个新的 Linux 进程,并使用单个执行线程。默认情况下,同一应用程序的所有组件都在同一进程和线程中运行(称为“主”线程)。默认情况下,每个应用程序都在其自己的进程中运行,并且该应用程序的所有组件都在该进程中运行。

    详细流程:http://developer.android.com/guide/components/processes-and-threads.html

    任务: 任务是用户在执行某项工作时与之交互的一系列活动。活动按每个活动的打开顺序排列在一个堆栈(“后堆栈”)中。 一个活动甚至可以启动设备上其他应用程序中存在的活动。例如,如果您的应用程序想要发送电子邮件,您可以定义一个意图来执行“发送”操作并包含一些数据,例如电子邮件地址和消息。来自另一个应用程序的声明自己处理这种意图的活动然后打开。在这种情况下,意图是发送一封电子邮件,因此电子邮件应用程序的“撰写”活动启动(如果多个活动支持相同的意图,则系统让用户选择使用哪一个)。发送电子邮件后,您的活动将恢复,并且电子邮件活动似乎是您的应用程序的一部分。即使 Activity 可能来自不同的应用程序,Android 通过将两个 Activity 保持在同一个任务中来保持这种无缝的用户体验。

    详细任务-http://developer.android.com/guide/components/tasks-and-back-stack.html

    【讨论】:

      【解决方案3】:

      来自Android Developer 的重要说明:

      关于 Android 多任务处理的一个常见误解是差异 在进程和应用程序之间。在 Android 中,这些并不紧密 耦合实体:应用程序在用户看来似乎没有 当前运行应用程序的实际进程;多个应用程序可能 共享进程,或者一个应用程序可以使用多个进程 视其需要而定;可以保留申请的进程 即使该应用程序没有积极执行,也被 Android 左右 东西。

      【讨论】:

        猜你喜欢
        • 2017-11-22
        • 1970-01-01
        • 2015-05-08
        • 1970-01-01
        • 2021-11-07
        相关资源
        最近更新 更多