Android:两个独立APK的两个服务之间的通信

时间:2016-06-13 19:13:08

标签: android service ipc messaging aidl

情况:

我有一个Android 系统应用程序(持久性),Service应该一直运行。 (我们称之为服务A)

然后还有另一个应用程序(不是系统应用程序;普通应用程序)也有Service。但是这个Service可能会运行或者可能不会运行,因为Android OS会在需要资源时将其终止。 (我们称之为服务B)

简而言之:我们有两个应用程序(因此可以使用2个APK),可以使用相同的证书进行签名。 (所以他们可以在同一个过程中运行吗?)

我尝试完成的任务

服务A监听事件。当它收到一个事件时,我希望服务A调用正常的应用程序(服务B),它应该给服务A一个回复。

允许两项服务沟通的方法

我可以让他们使用:

进行交流
  • 绑定(使用AIDL)
  • 消息传递(但由于必须传递复杂对象,因此不是最佳的)

问题

  • 对于所描述的案例,哪种沟通方式是“最好的”?
  • 当服务A想要将消息委托/发送到服务B并且服务B没有运行时会发生什么?它必须得到服务B的响应。如果服务A想要调用它,它是否总是启动服务B?

谢谢!

2 个答案:

答案 0 :(得分:2)

  

对于所描述的案例,哪种沟通方式是“最好的”?

你只引用两个选项,因为“Aidl”和“Binding”是相同的。您使用AIDL来描述和实现客户端代理和服务器端存根以进行跨进程服务绑定。

鉴于您需要调用和响应,绑定可能是更好的选择。但请注意,除了使用ParcelableSerializable或将对象图转换为JSON之外,没有IPC方法能够很好地支持“复杂对象”。

  

当服务A想要将消息委托/发送到服务B并且服务B没有运行时会发生什么?

当您致电startService()bindService()时,Android会为App B分配流程并创建服务实例(调用其onCreate())方法。此时,行为与进程和服务已经运行的行为相同。

答案 1 :(得分:0)

如果包含服务A的应用程序是系统应用程序,那么如何使用相同的证书对这两个应用程序进行签名?

您是否可以访问平台证书?

无论如何,helpl将是一个不错的选择,因为您需要来自服务B的回复。