Requirement:需要将服务/契约从不同的进程公开给其他应用程序。例如: getPhoneRecord(recordId)、deletePhoneRecord(phoneId)等。
潜在解决方案:Messenger还是AIDL
根据我的分析,我认为AIDL是唯一的选择,因为Messenger提供了一种非常通用的跨应用程序发送消息的方式。Messenger仅限于在客户端发送(Message)和服务器上的handleMessage(Message )。还有其他的区别,如多线程。但是,我关心的是从其他应用程序/消费者可以调用的服务中定义API契约。我的理解正确吗?
发布于 2014-08-11 03:03:00
是的,你的理解是正确的。在这两种情况下,您都必须清楚地定义API。如果使用Messenger,它只是异步自定义消息,因此如果您需要您的服务将数据发回,那么客户端也需要某种类似的机制。使用AIDL和绑定更加符合您所描述的您想要做的事情。
发布于 2014-08-12 17:06:54
根据Android文档:
大多数应用程序不应该使用AIDL来创建绑定服务,因为它可能需要多线程功能,并且可能导致更复杂的实现。
我只想确认一下,AIDL是我最好的朋友。因此,我总结了在Android中实现后台服务的情况:
总的来说,Android中的服务可以启动或绑定
Started 考虑到已启动的服务执行单个操作,并且不向调用方返回结果,因此它无法满足我的特定要求(将服务/契约从不同的进程公开到其他应用程序)。例如: getPhoneRecord(recordId),deletePhoneRecord(phoneId)等)
绑定服务有三种不同的风格
如果有人能参与我的决定我会很感激的。
发布于 2019-04-30 20:01:37
记下我在项目中为IPC选择通信机制时收集到的要点。可能对某人有帮助。
AIDL或Messenger,AIDL是最好的,它给我同步和异步调用的自由。
信使:
参考文献:http://codetheory.in/android-interprocess-communication-ipc-messenger-remote-bound-services/ https://www.slideshare.net/yoni1984/ipc-aidl-sexy-not-a-curse
AIDL:
https://stackoverflow.com/questions/25233720
复制相似问题