Android中任务和进程的区别

Emi*_*ano 51 android

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

如果我理解正确,任务只是一堆活动.从我到目前为止阅读的内容来看,我认为任务看起来像这样:

| Activity A running in Process P1 |
| Activity B running in Process P2 |
| Activity C running in Process P3 |
Run Code Online (Sandbox Code Playgroud)

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

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

最后一个问题:应用程序类(这基本上是一个单)表示进程或任务?

Nic*_*ion 45

我从中学到的一切,都是在这个页面上学到的.

编辑:我也偶然发现了活动和任务设计指南. 它看起来涵盖了您询问的确切主题.我学到了很多 :)

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

根据我的理解,你是对的.我的掌握是,进程是实际执行的单位,而任务是关于完成任务的关联.作为上述页面中的示例,如果您创建打开网页的intent,则它创建的Activity将在Web浏览器进程中创建,但与您的应用程序Task相关联.因此,任务将成为在不同进程上运行的活动的虚拟堆栈,具体取决于提供活动的应用程序.


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

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

通常,活动的新实例将启动到定义它的应用程序的进程中,因此活动的所有实例都在同一进程中运行


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

使用与上面相同的解释,我猜测Application对象代表Singleton的原因是因为所有应用程序活动都在单个进程上运行,并且该进程与Application绑定.我不知道这是一个设计点,但它似乎至少是当前设计的结果.

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

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

应运行活动的进程的名称.通常,应用程序的所有组件都在为应用程序创建的默认进程中运行.它与应用程序包具有相同的名称.元素的process属性可以为所有组件设置不同的默认值.但是每个组件都可以覆盖默认值,允许您跨多个进程分布应用程序.如果分配给此属性的名称以冒号(':')开头,则在需要时创建一个专用于应用程序的新进程,并在该进程中运行活动.如果进程名称以小写字符开头,则活动将在该名称的全局进程中运行,前提是它具有执行此操作的权限.这允许不同应用程序中的组件共享进程,从而减少资源使用.

  • 你非常感谢.大多数这些东西不需要做出好的应用程序,但我喜欢知道"引擎盖下"的东西.我在内核空间编程方面有一些经验,所以如果我不知道_exactly_发生了什么,我就无法入睡:D (5认同)
  • 如果你实现你的应用程序跨越多个进程(使用android:process),如果Application对象跨越多个进程,我会感到惊讶.我认为Application类只有一个坏名称,它应该被命名为"Process". (3认同)

met*_*dos 10

Android Developer的重要提示:

关于Android多任务的常见误解是流程和应用程序之间的差异.在Android中,这些不是紧密耦合的实体:在没有当前正在运行应用程序的实际进程的情 多个应用程序可以共享进程,或者一个应用程序可以根据其需要使用多个进程; 即使应用程序没有主动执行某些操作,Android也可以保留应用程序的进程.


小智 9

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

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

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

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