如果我有一个代表远程接口的Binder对象(到Android服务或到远程客户端的回调接口),当从多个线程通过这个对象发送IPC时,我需要显式同步吗,或者这是由底层Android组件处理的?
发布于 2012-09-18 18:45:20
如果我们希望客户端和服务在同一进程中运行,并且不希望在不同的应用程序之间执行并发IPC,则可以使用Binder类实现有界服务。因此,调用服务方法的线程(在客户端中)将被阻塞,直到它返回。在客户端(活动)中可能会产生多个线程,每个线程都会在任何时刻调用服务方法。因此,服务的实现应该是线程安全的,因为可能会有多个线程同时调用服务方法。结论是,当Binder类扩展到实现有界服务时,android并不关心同步。
如果我们希望允许来自不同应用程序的客户端访问IPC的服务,并希望在服务中处理多线程,则使用AIDL实现有界服务。结论是,当AIDL用于实现有界服务时,android并不关心同步。
发布于 2011-11-07 07:32:06
在Android中调用绑定器RPC方法是threadsafe,您可以从多个线程发出调用,而无需同步。
在接收端--假设服务位于与通常不同的进程中--您将从绑定器线程池中获得调用,而不管它在调用方是如何调用的。这意味着您的服务可能同时运行多个调用,因此在这一端要小心。
更多信息请访问安卓文档:Processes and Threads
https://stackoverflow.com/questions/3229597
复制相似问题