【发布时间】:2011-05-04 06:46:03
【问题描述】:
将服务放在单独的进程中或将其保留在应用程序的主进程中之间有什么实际区别?每个场景的用途是什么?
【问题讨论】:
将服务放在单独的进程中或将其保留在应用程序的主进程中之间有什么实际区别?每个场景的用途是什么?
【问题讨论】:
同时将服务放在另一个进程中会使您对静态变量的更改对主进程不可见。你可以得到情况,当你给一个变量赋值时,它没有改变!!我花了一整天的时间来解决这个问题!
【讨论】:
以下引用来自Android Developer's web site。
请注意,服务与其他应用程序对象一样,在其托管进程的主线程中运行。这意味着,如果您的服务要执行任何 CPU 密集型(例如 MP3 播放)或阻塞(例如网络)操作,它应该生成自己的线程来完成这项工作。
Jake 指出,您可以通过清单控制它正在运行的进程的名称。但以下来自 Documentatioin 的发现:
关于 Service 类的大部分困惑实际上都围绕着它不是什么:
- 服务不是一个单独的进程。 Service 对象本身并不意味着它在自己的进程中运行;除非另有说明,否则它会在与其所属的应用程序相同的进程中运行。
这很有趣,Here 说的是:
要运行服务的进程的名称。通常,应用程序的所有组件都在为应用程序创建的默认进程中运行。它与应用程序包同名。元素的 process 属性可以为所有组件设置不同的默认值。但是组件可以使用自己的进程属性覆盖默认值,从而允许您将应用程序分布在多个进程中。
但是无论如何,如果您需要将 Service 暴露给其他应用程序,例如,您需要向其他应用程序提供内容(如电话簿),设置 service 在不同进程中运行就是原因。
【讨论】:
我看到将服务放在另一个进程中的唯一原因是
但是,如果您创建了一个良好的应用程序并使用了良好的编程,那么您应该不会遇到这些问题。通过将您的服务放在一个单独的进程中,它会导致诸如 SharedPreferences 和并发数据库访问之类的问题......我建议不要这样做。
更不用说...另一个进程意味着另一个 DVM。与在一个 DVM 中运行相比,这将占用更多资源并减慢速度。
【讨论】:
当服务在主进程中运行时,它将停止,以防您的应用程序因任何原因崩溃。对于可以从不同应用程序或应该独立于您的主应用程序运行的服务的某些服务来说,将服务放入自己的进程是合理的。
【讨论】:
清单解析器拒绝使用服务的 process 属性,因此具有误导性!
【讨论】: