2014-02-05 24 views
0

根据来自AIDL文档的此消息,AIDL只有一个有效用例。为什么AIDL需要支持多线程?

只有当您允许来自不同应用程序的客户端访问您的IPC服务并希望处理服务中的多线程时,才需要使用AIDL。

在这种情况下,“处理多线程”究竟意味着什么?这不仅仅是具有多个运行线程的服务吗?

该文档进一步状态:

如果要执行IPC,但并不需要处理多线程,实现使用Messenger的你的界面

为什么Messenger无法接受支持多线程的服务?线程之间的通信不能在Messenger中处理(不使用共享内存)?

问题在这里,这个代码会显着更复杂,然后使用处理程序?

回答

2

它只是意味着AIDL调用可以是并发的(例如,几个应用程序在同一服务上调用相同的AIDL接口),因为Android会为您处理此问题,但Messenger不是(但您可以手动完成)。

+0

因此,它有很多服务的客户实例化信使并向服务发送消息,但这些消息不会被同时处理? – diedthreetimes

+0

不,它不好,因为它可能不是线程安全的,这取决于你如何实现它。我的意思是如果你使用'Messenger',你必须注意潜在的线程安全。 – m0skit0

+0

嗯,这里虽然线程安全会在邮件处理后发生。从[docs](http://developer.android.com/guide/components/bound-services.html#Messenger)看来,有很多线程通过信使发送消息没有问题。 (请参阅左侧的注释)。它最大的区别似乎是AIDL会为你自动创建一个线程池。并发管理的水平几乎相同。 – diedthreetimes