服务绑定链

时间:2018-01-30 11:04:03

标签: android android-service android-service-binding

我在我的应用程序中面临一个新问题,我有三种不同的Android服务。

  • LibService :这是一个从我使用的库中公开的服务,它连接到BLE传感器并允许Android设备从它们接收数据。
  • ConnectionService :这是我在我的应用程序的库模块中创建的一项服务,该模块绑定到 LibService 并负责维护连接到BLE传感器。
  • TaskService :在我的应用程序模块中创建的此服务使用从传感器接收的数据负责计算不同的任务。该服务绑定到 ConnectionService 以接收数据。

我面临的问题是如何同步这三种服务的绑定链。当我绑定到TaskService时,它又绑定到ConnectionService,而ConnectionService又绑定到LibService。几乎总是第一个服务连接,即TaskService和ConnectionService之间的连接,在ConnectionService和LibService之间的连接之前解析。因此,当我在TaskService中使用ConnectionService绑定器时,我得到一个NullPointerException,因为ConnectionService还没有LibService绑定器。

我尝试使用锁来阻止ConnectionService在检索到LibService绑定程序之前返回绑定程序,但这会导致应用程序阻塞,因为在主线程上执行服务连接会阻止它解析第二个服务连接。

哪种方法可以解决问题? 感谢

1 个答案:

答案 0 :(得分:1)

这种架构在Android中有点困难。我的建议是,在成功建立自己的绑定和其他资源之后,每个Service都会向其绑定的客户端发送一条额外的“就绪”通知消息。您可以通过使用Intent中的广播Service返回其客户端来实现此目的,或者您可以使用双向(回调)通信,具体取决于您之间已实现的通信方法你的Service和他们的客户。

应在客户端绑定后发送“就绪通知”,直到客户端收到需要“等待”的“就绪通知”(这可以通过显示进度通知或进度对话框或“初始化...”来完成。 “对话框或动画或任何让用户占用的东西。