【发布时间】:2012-09-19 21:01:12
【问题描述】:
- 是否可以在单独的进程上启动IntentService?如何?如果是这样,是否必须绑定它?
- 是否可以在单独的进程和run it in the foreground 上启动IntentService?
-
android:isolatedProcess和android:process有什么区别?见:http://developer.android.com/guide/topics/manifest/service-element.html
【问题讨论】:
-
使用额外的进程不是一个好主意,因为它会浪费 RAM 和 CPU,通常对用户没有好处。
-
@CommonsWare:先生,罗杰!在任何情况下您都建议使用单独的流程?
-
一般来说多进程是浪费的。但是,我可以想到它们有用的一些情况:1)您需要比单个进程中获得的更多内存 - 因此您将应用程序拆分为多个进程,因为内存限制是每个进程的。 2)您有一个需要一直运行的服务和一个不需要运行的大型 UI - 您将 UI 放在一个进程中,Android 可以在不需要时将其终止,并将该服务放在另一个一直运行的进程中(这实际上证明是更好地利用 RAM/CPU)。
-
3) 您的应用程序的一部分是稳定的,其中一部分是易碎的/错误的或存在问题或从某个网站下载 - 您在一个进程中运行稳定的代码,而在另一个进程中运行其他东西,所以当 flakey 代码崩溃时,它不会占用稳定的部分。
-
@DavidWasser:欢迎您引用您关于原因 #2 的主张的证据。 #3 没有足够的理由在缓慢、低内存的移动设备上进行第二个进程恕我直言。我承认 #1 是针对 Android 1.x/2.x 的,但
android:largeHeap是为 API 级别 11 及更高版本添加的,以便在不需要其他进程的情况下为您提供更多堆空间,并且太多开发人员认为“哦,给我更多的堆”是低效编码的解决方案。