【问题标题】:Android remote bound service interfaceAndroid远程绑定服务接口
【发布时间】:2012-09-10 11:04:00
【问题描述】:

我正面临这样的问题: 我有一个远程(不同进程)绑定服务,它定义了一个带有操作字符串的IntentFilter。 我的客户端在其bindService(..) 调用中使用相同的操作字符串绑定到它。

现在,当我实现另一个具有完全不同的 AIDL 接口但定义了相同 IntentFilter 的服务时,安装此服务并删除旧服务:

  1. 我的客户端仍然可以绑定
  2. 我的客户端甚至可以调用所需的方法(比如 void print(Payload)),客户端不抱怨,服务器也不抱怨 侧面

我的问题:有没有办法在运行时检查远程服务正在实现的接口?

我发现的唯一可能的方法是检查ServiceConnection 中的ComponentName。 然而,这有一个含义: 以后不能换服务的实现了。

还是我错过了什么?

【问题讨论】:

    标签: android service interface aidl


    【解决方案1】:

    据我了解,您想做以下两件事之一:

    a) 连接到实现所需接口的服务(并且您不关心服务是如何实现的)

    在这种情况下,您使用意图过滤器。在这种情况下,每个服务都应该有不同的内部过滤器。一般来说,当您定义相同的意图过滤器时,您是在说这两个服务是兼容的(但它们不兼容,因为 AIDL 不同)。

    所以,你应该在这里有不同的意图过滤器。

    b) 连接到一个非常特殊的服务(它不能被任何其他服务替代)。

    在这种情况下,当您执行 bindService 时,您应该在意图中指定显式组件名称,然后将其传递给 bindService。

    【讨论】:

    • 感谢您的回答。我最初想要的是:我将提供一些客户端应用程序和服务的默认实现(例如 PrintService)。然后我想让第 3 方提供他们自己的服务实现(相同的 AIDL)。通过使用
    猜你喜欢
    • 2022-12-29
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    相关资源
    最近更新 更多