我对Android中的任务和流程之间的区别感到有点困惑。
如果我理解正确,任务只是一堆活动。从我到目前为止阅读的内容来看,认为任务看起来像这样:
| Activity A running in Process P1 |
| Activity B running in Process P2 |
| Activity C running in Process P3 |
所以基本上来自不同进程的活动可以包含在同一个堆栈中。我是对的吗?
另一个问题:“应用程序上下文”的真正含义是什么?过程还是任务?
最终问题:应用程序类(基本上是单例)代表进程或任务?
答案 0 :(得分:41)
我所学到的一切,我都是在page.
上学到的修改:我也偶然发现Activity and Task Design Guidelines.它看起来涵盖了您询问的确切主题。我学到了很多东西:))
所以基本上来自不同的活动 流程可以包含在同一个流程中 堆。我是对的吗?
根据我的理解,你是对的。我的掌握是,进程是实际执行的单位,而任务是关于完成任务的关联。作为上述页面中的示例,如果您创建打开网页的intent,则它创建的Activity将在Web浏览器进程中创建,但与您的应用程序Task相关联。因此,任务将成为在不同进程上运行的活动的虚拟堆栈,具体取决于提供活动的应用程序。
另一个问题:什么是真实的 “应用程序上下文”的含义?该 过程还是任务?
这是一个很好的问题。基于阅读上面的页面,我的理解是应用程序上下文与该过程相关联。我基于该页面对此行的解释,但可能还有其他信息:
通常,一个新的实例 活动开始进入流程 定义它的应用程序,所以 所有活动实例都在运行 同样的过程
最后一个问题:申请 class(基本上是单身) 代表过程或任务?
使用与上面相同的解释,我猜测Application对象代表Singleton的原因是因为所有应用程序活动都在单个进程上运行,并且该进程与Application绑定。我不知道这是一个设计点,但它似乎至少是当前设计的结果。
修改:有一些警告。您的应用程序似乎可以分布在多个进程中,因此,我的猜测是应用程序对象和上下文充当将所有进程捆绑在一起的机制。我很确定你的心理模型已经允许这个,假设这些过程来自不同的应用程序,所以它只允许在一个过程中有一点点差异。
清单元素具有属性 android:process ,其描述如下:
的名字 活动应该进行的过程 跑。通常,一个组件 应用程序在默认进程中运行 为应用程序创建。它有 与应用程序同名 包。要素 process属性可以设置不同 所有组件的默认值。但每一个 组件可以覆盖默认值, 让你传播你的 跨多个流程的应用程序 如果名称分配给此属性 以冒号(':')开头,一个新的 进程,私有的应用程序, 是在需要的时候创建的 活动在该过程中运行。如果 进程名称以小写字母开头 字符,活动将在一个 提供了该名称的全局流程 它有权这样做。这个 允许不同的组件 共享流程的应用程序, 减少资源使用。
答案 1 :(得分:8)
来自Android Developer的重要提示:
关于Android多任务的常见误解是不同的 进程和应用程序之间。在Android中,这些并不紧密 耦合实体:应用程序可能看起来没有用户 当前运行应用程序的实际进程;多个申请可能 共享进程,或者一个应用程序可以使用多个进程 根据需要;可以保留申请的过程 即使该应用程序没有主动执行,也可以通过Android实现 东西。
答案 2 :(得分:7)
<强>过程:强> 当应用程序组件启动且应用程序没有运行任何其他组件时,Android系统会使用单个执行线程为应用程序启动新的Linux进程。默认情况下,同一应用程序的所有组件都在同一进程和线程中运行(称为&#34; main&#34;线程)。每个应用程序在其自己的进程中运行,并且应用程序的所有组件都在该进程中运行,默认情况下
详细流程:http://developer.android.com/guide/components/processes-and-threads.html
<强>任务:强> 任务是用户在执行特定作业时与之交互的活动的集合。活动按堆栈排列(&#34;后堆栈&#34;),按每个活动的打开顺序排列。 活动甚至可以启动设备上其他应用程序中存在的活动。例如,如果您的应用程序想要发送电子邮件,您可以定义执行&#34;发送&#34;操作并包含一些数据,例如电子邮件地址和消息。然后打开另一个声明自己处理此类意图的应用程序的活动。在这种情况下,目的是发送电子邮件,以便电子邮件应用程序&#34;撰写&#34;活动开始(如果多个活动支持相同的意图,则系统允许用户选择要使用的活动)。发送电子邮件后,您的活动将恢复,似乎电子邮件活动是您的应用程序的一部分。尽管活动可能来自不同的应用程序,但Android通过将两个活动保持在同一任务中来维护这种无缝的用户体验。
详细任务 - http://developer.android.com/guide/components/tasks-and-back-stack.html