15

我开发了一个应用程序并执行了一些测试。该测试包括将数据从一个后台服务发送到另一后台服务。在传输速率较低(4 次意图/秒)时接收到所有数据。但是,当我提高传输速率(8 和 12 次意图/秒)时,目标服务未接收到一些数据(通常为 2-3%)。

所有意图都被广播并且服务在本地运行。

谁能告诉我,操作系统如何处理意图和整个机制的工作原理,以便找出接收者未收到数据的原因?

此致,

4

3 回答 3

3

以下是相关方法(您可以看到从 ContextImpl.broadcastIntent() 方法调用的第一个方法,请参阅Force's answer中的链接):

于 2012-06-26T09:14:47.793 回答
3

首先,我宁愿建议绑定服务,然后使用 Handlers for IPC。一个很好的例子可以在这里找到:http: //developer.android.com/guide/components/bound-services.html这更快更可靠。

关于 Intents 如何在内部工作,您可以查看源代码:https ://github.com/android/platform_frameworks_base/blob/master/core/java/android/app/ContextImpl.java#L893

于 2012-06-26T08:57:17.453 回答
1

一个可能的原因是 Android 进程间通信是同步的。在服务器进程的应答期间,调用客户端进程被阻塞。您的带有计时器的服务会在(非常短的)时间段内被阻止,这可能会导致您观察到的行为。

资料来源:Android Binder - Thorsten Schreiber 的 Android 进程间通信,第 11 - 13 页。

编辑:我一直公布答案,因为 Chris Stratton 和 João Nunes 的评论很有价值。

于 2012-06-26T15:50:38.733 回答