我开发了一个App,我执行了一些测试。这项测试包括 将数据从一个后台服务发送到另一个后台 服务。 当传输速率低(4个意图/秒)时,接收所有数据。但是什么时候 我增加了传输速率(8和12意图/秒),一些数据(通常为2-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的评论很有价值。