首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AIDL对信使

AIDL对信使
EN

Stack Overflow用户
提问于 2014-08-10 22:43:10
回答 5查看 7.7K关注 0票数 9

Requirement:需要将服务/契约从不同的进程公开给其他应用程序。例如: getPhoneRecord(recordId)、deletePhoneRecord(phoneId)等。

潜在解决方案:Messenger还是AIDL

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-08-11 03:03:00

是的,你的理解是正确的。在这两种情况下,您都必须清楚地定义API。如果使用Messenger,它只是异步自定义消息,因此如果您需要您的服务将数据发回,那么客户端也需要某种类似的机制。使用AIDL和绑定更加符合您所描述的您想要做的事情。

票数 5
EN

Stack Overflow用户

发布于 2014-08-12 17:06:54

根据Android文档:

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

我只想确认一下,AIDL是我最好的朋友。因此,我总结了在Android中实现后台服务的情况:

总的来说,Android中的服务可以启动或绑定

Started 考虑到已启动的服务执行单个操作,并且不向调用方返回结果,因此它无法满足我的特定要求(将服务/契约从不同的进程公开到其他应用程序)。例如: getPhoneRecord(recordId),deletePhoneRecord(phoneId)等)

绑定服务有三种不同的风格

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

如果有人能参与我的决定我会很感激的。

票数 12
EN

Stack Overflow用户

发布于 2019-04-30 20:01:37

记下我在项目中为IPC选择通信机制时收集到的要点。可能对某人有帮助。

AIDL或Messenger,AIDL是最好的,它给我同步和异步调用的自由。

信使:

  • 异步通信
  • 可通过意图发送到远程进程的对Handler的引用。
  • 复杂性是中等的。
  • 远程进程通过信使发送的消息被传递给本地处理程序。
  • 当使用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:

  • 它是同步的和异步的进程通信。默认情况下,AIDL通信是同步的。为了使AIDL通信异步,使用“单向”关键字。
  • 复杂性很高- AIDL接口同时向服务发送请求,服务必须处理多线程.
  • 一对一通信
  • 使用底层的Android OS绑定框架
  • 需要编写线程安全代码。
  • Binder事务缓冲区有一个有限的固定大小,当前为1Mb,该大小由进程中所有正在进行的事务共享。https://developer.android.com/reference/android/os/TransactionTooLargeException.html
  • 安全性: AIDL允许开发人员向其他应用程序公开他们的接口。客户端和服务双方为了相互沟通而达成一致。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25233720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档