Intents如何在内部工作?

时间:2012-06-18 14:14:54

标签: android android-intent

我开发了一个App,我执行了一些测试。这项测试包括 将数据从一个后台服务发送到另一个后台 服务。 当传输速率低(4个意图/秒)时,接收所有数据。但是什么时候 我增加了传输速率(8和12意图/秒),一些数据(通常为2-3%) 目的地服务没有收到。

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

谁能告诉我,怎么样? 操作系统处理意图,整个机制起作用,以便查找 它的接收器没有收到数据的原因是什么?

致以最诚挚的问候,

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

资料来源:Android Binder - Android Interprocess Communication by Thorsten Schreiber,第11 - 13页。

编辑:我保留了答案,因为Chris Stratton和JoãoNunes的评论很有价值。