Android服务:过程与不

服务放在一个单独的过程中还是保持在应用程序的主要过程之间有什么实际的区别? 每个场景将用于什么?

Solutions Collecting From Web of "Android服务:过程与不"

当一个服务在主进程中运行时,它会停止,以防你的应用程序因为什么原因崩溃。 把一个服务放到它自己的进程中是合理的,一些服务可以从不同的应用程序或服务中使用,这些服务应该独立于你的主应用程序运行。

我看到将服务放在另一个进程中的唯一原因是

  1. 该应用程序是资源沉重,可能会被操作系统快速杀死。 把服务放在一个独立的进程将分配资源,如果你的应用程序死亡你的服务不会。
  2. 只是万一你的应用程序有错误,并死亡你的服务将继续下去。

但是,如果您创build了一个好的应用程序并使用了良好的编程,则不应该遇到这些问题之一。 通过让你的服务在一个单独的过程,它会导致像SharedPreferences和并发数据库访问的问题…我会build议不要这样做。

更何况…另一个过程意味着另一个DVM。 这将比在一台DVM上运行需要更多的资源,并且会减慢速度。

另外将服务放在另一个进程中,使得你对主进程不可见的静态variables的改变。 你可以得到的情况,当你分配一个variables有一些价值,并没有改变! 我花了整整一天的这个问题!

以下是Android开发人员网站的引用。

请注意,与其他应用程序对象一样,服务在主机进程的主线程中运行。 这意味着,如果你的服务要做任何密集的CPU(比如MP3播放)或者阻塞(比如networking)操作,它应该产生自己的线程来完成这个工作。

杰克指出,你可以通过清单来控制正在运行的进程的名称 。 但是,从Documentatioin的结果:

关于服务类的大部分困惑实际上围绕着什么不是:

  • 服务不是一个单独的过程。 服务对象本身并不意味着它在自己的进程中运行; 除非另有说明,它运行在与它所属的应用程序相同的进程中。

这很有意思, 这里说的是:

服务要运行的进程的名称。 通常,应用程序的所有组件都在为应用程序创build的默认进程中运行。 它与应用程序包具有相同的名称。 元素的进程属性可以为所有组件设置不同的默认值。 但是组件可以使用自己的进程属性覆盖缺省值,允许您将应用程序分布在多个进程中。

但无论如何,如果您需要将Service暴露给其他应用程序,例如您需要向其他应用程序提供内容(如电话簿),则设置服务在不同的进程中运行是原因。

清单parsing器拒绝使用服务的进程属性,所以相当具有误导性!