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

Android: Communication between two Services of two separate APKs

情况:

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

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

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

我想完成的事情

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

让两个服务进行通信的方法

我可以让他们使用以下方式进行交流:

问题

谢谢!

Which way to communicate is "the best" one for the described case?

您只引用了两个选项,因为 "Aidl" 和 "Binding" 是同一回事。您使用 AIDL 来描述和实现用于跨进程服务绑定的客户端代理和服务器端存根。

鉴于您需要呼叫和响应,绑定可能是更好的选择。但是请注意,除了使用 ParcelableSerializable 或将对象图转换为 JSON 之类的东西之外,没有任何 IPC 方法可以很好地支持 "complex objects"。

What happens when Service A wants to delegate/send a message to Service B and Service B is not running?

当您调用 startService()bindService() 时,Android 为 App B 派生一个进程并创建服务实例(调用其 onCreate())方法。此时,行为与进程和服务已经 运行.

相同

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

您是否有权限获取平台证书?

无论如何,aidl 将是一个不错的选择,因为您需要服务 B 的响应。