Android中的任务和过程之间的区别
我对Android中一个任务和一个进程之间的区别有些困惑。
如果我理解正确,任务只是一堆活动。 从我读到目前为止,我认为一个任务可能是这样的:
| Activity A running in Process P1 | | Activity B running in Process P2 | | Activity C running in Process P3 |
所以基本上来自不同进程的活动可以包含在同一个栈中。 我对么?
另一个问题 :“应用程序上下文”的真正含义是什么? 这个过程还是任务?
最后的问题 :应用程序类(基本上是单例)代表进程还是任务?
我学到的一切,我已经在这个页面上学到了。
编辑 :我也偶然发现活动和任务devise指南。 它看起来涵盖了你问的确切的主题。 我学到了很多 :)
所以基本上来自不同进程的活动可以包含在同一个栈中。 我对么?
根据我的理解,你是对的。 我的把握是,进程是实际执行的单位,而任务是关于完成任务的关联。 作为上述页面的一个例子,如果您创build了一个打开网页的意图,则它创build的活动在Web浏览器上创build,但与您的应用程序Task关联。 因此,任务取决于提供活动的应用程序而成为在不同进程上运行的活动的虚拟堆栈。
另一个问题:“应用程序上下文”的真正含义是什么? 这个过程还是任务?
这是一个很好的问题。 基于阅读上面的页面,我的理解是一个应用程序上下文与过程相关联。 我基于这个页面的这条线的解释,但可能有其他信息:
通常,一个活动的新实例被启动到定义它的应用程序的进程中,因此活动的所有实例都在相同的进程中运行
最后的问题:应用程序类(基本上是单例)代表进程还是任务?
与上面相同的解释,我猜测为什么Application对象表示一个Singleton是因为所有的应用程序活动都运行在一个进程上,并且这个进程与应用程序绑定在一起。 我不知道这是一个devise的问题,但似乎至less是当前devise的结果。
编辑 :这有一些警告。 看起来你的应用程序可以分布在多个进程中,所以我的猜测是应用程序对象和上下文作为一个机制来共享所有的进程。 我很确定你的思维模型已经允许这样做,假设这些进程来自不同的应用程序,所以它只是一个小的差异,以允许它在一个进程内。
manifest元素具有属性android:process ,描述如下:
活动应该运行的过程的名称。 通常,应用程序的所有组件都在为应用程序创build的默认进程中运行。 它与应用程序包具有相同的名称。 元素的进程属性可以为所有组件设置不同的默认值。 但是每个组件都可以覆盖默认值,从而允许您跨多个进程分布应用程序。 如果分配给该属性的名称以冒号(':')开始,则在需要时会创build一个专用于应用程序的新进程,并在该进程中运行该活动。 如果进程名称以小写字母开头,则该活动将以该名称的全局进程运行,前提是该进程有权这样做。 这允许不同应用程序中的组件共享一个进程,从而减less资源使用。
Android开发人员的一个重要提示:
Android多任务的一个常见误解是stream程和应用程序之间的差异。 在Android中,这些不是紧密耦合的实体:应用程序似乎对用户而言没有实际进程运行应用程序; 多个应用程序可以共享进程,或者一个应用程序可以根据其需要使用多个进程; 应用程序的进程可能会被Android保留,即使应用程序没有主动执行某些操作。
过程: 当应用程序组件启动并且应用程序没有任何其他组件运行时,Android系统将使用单个执行线程为应用程序启动一个新的Linux进程 。 默认情况下,同一应用程序的所有组件都运行在相同的进程和线程中(称为“主”线程)。每个应用程序在其自己的进程中运行,并且应用程序的所有组件都在该进程中运行。
详细过程: http : //developer.android.com/guide/components/processes-and-threads.html
任务: 任务是用户在执行特定工作时与之交互的一系列活动。 这些活动按照每个活动打开的顺序排列在一个堆栈中(“后退堆栈”)。 一项活动甚至可以启动设备上其他应用程序中存在的活动。 例如,如果您的应用程序想要发送电子邮件,则可以定义执行“发送”操作的意图,并包含一些数据,例如电子邮件地址和消息。 然后打开另一个声明自己处理这种意图的应用程序的活动。 在这种情况下,意图是发送电子邮件,因此电子邮件应用程序的“撰写”活动开始(如果多个活动支持相同的意图,则系统让用户select使用哪一个)。 发送电子邮件时,您的活动将恢复,看起来电子邮件活动似乎是您的应用程序的一部分。 尽pipe这些活动可能来自不同的应用程序,但Android通过将这两个活动保持在同一个任务中来保持这种无缝的用户体验。
详细任务 – http://developer.android.com/guide/components/tasks-and-back-stack.html
- 如何在IntelliJ IDEA中添加库(android-support-v7-appcompat)
- 为什么在invalidate()之后不调用onDraw?
- SlidingTabLayout以适应屏幕
- Facebook SDK 4.10上的NPE:尝试调用空对象引用上的接口方法java.lang.Object com.facebook.inject.Lazy.get()
- 在Android Studio中无法parsing符号HttpGet,HttpClient,HttpResponce
- 错误:原因:com.android.sdklib.repository.FullRevision
- 用C或C ++编写Android应用程序?
- ProGuard:库类的重复定义?
- 无法实例化应用程序com.android.tools.fd.runtime.BootstrapApplication?Android