Android 中具有多个 AIDL 接口的单一服务

Dan*_*iel 5 android android-intent android-service

如何从单个服务提供多个 AIDL 接口?场景如下:

                    |---Client_1
          |--AIDL1--|     ...
          |         |---Client_6
MyService |
          |         |---Client_4
          |--AIDL2--|     ...
                    |---Client_9
Run Code Online (Sandbox Code Playgroud)
  • 具有多个 AIDL 的单一服务;
  • 每个客户端可以访问任意数量的 AIDL 接口;
  • 为了更好地理解上图,一些客户端(例如 Client_1、Client_8)只使用一个接口,而其他客户端(例如 Client_4、Client_5、Client_6)同时访问 AIDL1 和 AIDL2。

我的想法是使用方法的意图public IBinder onBind(Intent intent)以某种方式找出客户端应用程序调用的类型以及该客户端感兴趣的 AIDL。这可能吗?

Hol*_*Man 3

我也有同样的问题,写了原型进行测试。实际上,它应该通过检查意图并根据意图附加信息返回不同的活页夹来工作。

但经过测试,我发现 onBind 只为第一个客户端调用一次。之后,系统会将缓存的绑定器返回给后续想要绑定该服务的客户端。

Android官方文档描述

多个客户端可以同时连接到该服务。但是,系统仅在第一个客户端绑定时调用服务的 onBind() 方法来检索 IBinder。然后,系统将相同的 IBinder 传递给任何绑定的其他客户端,而无需再次调用 onBind()。

我仍在尝试寻找方法,但似乎不可能做到这一点。