AIDL vs Messenger

use*_*846 9 multithreading android aidl

要求:需要将服务/合同从其他流程公开给其他应用程序.例如:getPhoneRecord(recordId),deletePhoneRecord(phoneId)等
潜在的解决方案:Messenger或AIDL

根据我的分析,我认为AIDL是唯一的选择,因为Messenger提供了一种非常通用的跨应用程序发送消息的方式.Messenger仅限于在客户端发送(Message)和在服务器上发送handleMessage(Message msg).还存在其他差异,例如多线程.但是,我关心的是从其他应用程序/消费者可以调用的服务定义API契约.我的理解是否正确?

use*_*846 12

每个Android文档:

大多数应用程序不应使用AIDL来创建绑定服务,因为它可能需要多线程功能,并且可能导致更复杂的实现.

我只是想确保我确信AIDL是我最好的朋友.所以,我想出了在Android中实现后台服务的以下摘要:

从广义上讲,Android中的服务可以启动绑定

已启动服务 假定已启动的服务执行单个操作但未将结果返回给调用方,因此无法满足我的特定要求(将服务/合同从其他进程暴露给其他应用程序.例如:getPhoneRecord(recordId) ),deletePhoneRecord(phoneId)等)

绑定服务 有三种不同的口味

  1. 扩展Binder类 - 仅用于私有服务,在应用程序内运行.无法跨越流程边界.所以我也不能用它.
  2. 使用Messenger-提供了一种在应用程序之间发送消息的非常通用的方式.Messenger仅限于在客户端发送(Message)和在服务器上发送handleMessage(Message msg).
  3. 使用AIDL-赢家!

如果有人能够权衡我的决定,我们将不胜感激.


Lar*_*fer 5

是的,你的理解是正确的。无论哪种情况,您都必须明确定义您的 API。如果使用 Messenger,它只是异步的自定义消息,因此如果您需要服务将数据发回,您还需要在客户端使用某种类型的类似机制。使用 AIDL 和 binders 更符合您描述的您想要做的事情。