2010-07-29 54 views
1

我对Android服务在哪里运行感到困惑。我知道标记为“remote”的服务在自己的进程中运行,但普通的本地服务又如何呢?如何在Android中创建两个协作但非阻塞的服务?

我问的原因是我想要两个本地服务合作,但不会被对方阻止。例如,Service1管理网络连接并接收数据包。收到一个数据包后,我需要该服务将数据包交给Service2处理信息并采取一些行动,包括可能发送一个返回消息。我需要接收,切换和处理以异步方式进行,因此网络服务可以在应用程序服务处理它们时继续接收数据包。我如何确保这种情况发生?

我知道一种解决方案是广播Intents,但是如何将自定义数据对象(即数据包)包含在Intent中?我不想实现parcelable接口(本地服务的矫枉过正),但我真的需要能够在这些服务之间传递复杂的数据对象。

感谢

回答

0

一切都在你的清单文件中被定义为在同一个进程中运行也有着相同的主线程。此线程有时也是UI线程,如果该进程有活动在其中运行。因此,如果您有两个本地服务,并且它们在同一个进程中运行,它们将共享相同的主执行线程。为了让他们同时工作(直到多核Android设备存在,所有执行都是连续的),那么处理网络连接的服务将需要在单独的线程中完成。您的其他服务也需要另一个线程。

您的问题通常被称为生产者 - 消费者模式。以下是a link使用阻塞队列的简单实现的简单示例。