【问题标题】:Can you start an IntentService on a separate process?您可以在单独的进程上启动 IntentService 吗?
【发布时间】:2012-09-19 21:01:12
【问题描述】:
  1. 是否可以在单独的进程上启动IntentService?如何?如果是这样,是否必须绑定它?
  2. 是否可以在单独的进程和run it in the foreground 上启动IntentService
  3. android:isolatedProcessandroid: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 及更高版本添加的,以便在不需要其他进程的情况下为您提供更多堆空间,并且太多开发人员认为“哦,给我更多的堆”是低效编码的解决方案。

标签: android android-service


【解决方案1】:

1) 是否可以在单独的进程上启动IntentService?如何?如果是,是不是必须绑定?

是的,您可以在单独的进程中启动IntentService。只需将 android:process=":whatever" 添加到该服务的清单条目即可。

不,您不需要绑定到它。你可以通过使用startService()向它发送Intents来与它通信

2) 是否可以在单独的进程上启动 IntentService 并在前台运行它?

是的(见上文)。为了让您的服务在前台运行,它可以随时调用startForeground()。服务本身可以控制它是在前台运行还是在后台运行。

3) android:isolatedProcessandroid:process 有什么区别?见:http://developer.android.com/guide/topics/manifest/service-element.html

android:process 允许您控制每个特定组件在哪个进程中运行(通过指定进程的名称)。您可以将应用程序的组件分组以在单独的进程中运行(例如,一个进程中的所有 UI 组件和另一个进程中的所有服务)。默认行为是应用程序的所有组件在同一个进程中运行。

android:isolatedProcess 是一个标志(真/假),如果您希望特定服务组件在与应用程序的其余部分隔离的单独进程中运行,您可以设置该标志。隔离进程没有授予应用程序其余部分的任何权限。通常,权限被授予应用程序,并且应用程序的所有组件都具有应用程序获得的所有权限。 android:isolatedProcess 仅从 API 级别 16 (Jellybean) 开始可用。见http://aleksmaus.blogspot.de/2012/09/a-feature-of-android-jelly-bean.htmlAdvantage of introducing Isolatedprocess tag within Services in JellyBean[Android]

【讨论】:

  • 谢谢大卫。不知道孤立的进程。
  • @HowardHodson isolatedProcess 仅适用于 Jellybean (4.1)
  • 隔离进程的一个小补充:它不仅缺少应用程序的android权限,而且只能访问世界可读的文件,这尤其意味着它无法访问应用程序的文件。
猜你喜欢
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
  • 2010-10-25
  • 2013-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多