Messenger Service可以用于跨应用IPC吗?

Posted

技术标签:

【中文标题】Messenger Service可以用于跨应用IPC吗?【英文标题】:Can Messenger Service be used for inter app IPC? 【发布时间】:2012-05-22 15:02:44 【问题描述】:

我有三个应用程序,其中两个应用程序需要连接到第三个应用程序发布的服务。该服务应该通过 GPRS 发送/接收数据并将其传递给两个应用程序。我已在第三个应用程序中将此服务实现为 Messenger 服务。在 android 文档中提到,Messenger 服务可用于两个进程之间但在同一个应用程序中的通信。但是我的问题是,是否可以使用 Messenger 服务在属于两个不同应用程序的两个进程之间进行通信?如果是的话,有人可以给我看一些示例代码来演示客户端如何绑定到这样的服务。

【问题讨论】:

我发现了这个link,它指出我想要做的事情是可能的,但我仍然无法弄清楚如何从另一个应用程序中的客户端绑定到这样的服务 【参考方案1】:

答案是肯定的。我不确定您是否可以显式引用另一个包中定义的服务类,但您绝对可以通过隐式 Intent 引用该服务。

可以在here 找到该技术的简洁代码示例。这张特殊的幻灯片谈到了使用 Messenger 进行 IPC,但整个演示文稿值得一看 IMO。

【讨论】:

【参考方案2】:

根据 android 文档,Messenger 服务可用于两个进程之间的通信,但它不限制它在同一个应用程序中。进程可以在同一个应用程序或不同的应用程序中。

如果我们希望请求在进入处理程序队列中的消息时按顺序处理,则应该使用 Messenger,并且它们会被一一处理。

【讨论】:

以上是关于Messenger Service可以用于跨应用IPC吗?的主要内容,如果未能解决你的问题,请参考以下文章

Service的启动,绑定,绑定后通信,跨应用绑定,跨应用绑定后通信

android Messenger跨进程通信

[servlet.service()对于路径为[/messenger.service]的Servlet [Jersey Web应用程序]引发了异常[java.lang.NullPointerExcep

Android Service IPC通信之Messenger机制

使用Messenger进行Activity与Service之间的相互通信

为啥 AIDL/Messenger 绑定到服务?