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

时间:2014-11-21 16:00:08

标签: android android-intent android-service

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

Android official document描述

  

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

我仍然试图找到方法,但似乎无法做到这一点。