【问题标题】:Android Service: Process vs. NotAndroid 服务:处理与不处理
【发布时间】:2011-05-04 06:46:03
【问题描述】:

将服务放在单独的进程中或将其保留在应用程序的主进程中之间有什么实际区别?每个场景的用途是什么?

【问题讨论】:

标签: android process service


【解决方案1】:

同时将服务放在另一个进程中会使您对静态变量的更改对主进程不可见。你可以得到情况,当你给一个变量赋值时,它没有改变!!我花了一整天的时间来解决这个问题!

【讨论】:

  • true ..你能解释一下为什么会出现这种行为
  • @William 您建议使用什么?将我的变量放在 APPLICATION 类中?
  • 是的。将它们放在您了解其生命周期的对象中。我一般使用Application类。
【解决方案2】:

以下引用来自Android Developer's web site

请注意,服务与其他应用程序对象一样,在其托管进程的主线程中运行。这意味着,如果您的服务要执行任何 CPU 密集型(例如 MP3 播放)或阻塞(例如网络)操作,它应该生成自己的线程来完成这项工作。

Jake 指出,您可以通过清单控制它正在运行的进程的名称。但以下来自 Documentatioin 的发现:

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

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

这很有趣,Here 说的是:

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

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

【讨论】:

【解决方案3】:

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

  1. 应用程序资源繁重,可能会被操作系统迅速杀死。将服务放在单独的进程中将分配资源,如果您的应用程序死了,您的服务不会。
  2. 万一您的应用出现错误并死机,您的服务将继续运行。

但是,如果您创建了一个良好的应用程序并使用了良好的编程,那么您应该不会遇到这些问题。通过将您的服务放在一个单独的进程中,它会导致诸如 SharedPreferences 和并发数据库访问之类的问题......我建议不要这样做。

更不用说...另一个进程意味着另一个 DVM。与在一个 DVM 中运行相比,这将占用更多资源并减慢速度。

【讨论】:

    【解决方案4】:

    当服务在主进程中运行时,它将停止,以防您的应用程序因任何原因崩溃。对于可以从不同应用程序或应该独立于您的主应用程序运行的服务的某些服务来说,将服务放入自己的进程是合理的。

    【讨论】:

      【解决方案5】:

      清单解析器拒绝使用服务的 process 属性,因此具有误导性!

      【讨论】:

      • Eureka... 此链接androidsoftwaredeveloper.com/2009/03/20/how-to-start-on-boot 显示进程名称必须以 android.process 开头,例如android:process="android.process.myservice"
      • 与之通信的任何广播接收器也必须在该进程中,因此它应该具有相同的名称,例如android:process="android.process.myservice"
      • 这大大加快了我的申请速度!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 2016-01-14
      • 2011-04-11
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多