服务绑定链

Service binding chain

我的应用程序遇到了一个新问题,我有三个不同的 Android 服务。

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

我尝试使用锁来阻止 ConnectionService 在检索到 LibService 活页夹之前 return 活页夹,但这会导致应用程序阻塞,因为服务连接是在主线程上执行的,从而阻止了它解析第二个服务连接。

解决问题的正确方法是什么? 谢谢

这种架构在Android中有点难度。我的建议是你有一个额外的 "ready" 通知消息,由每个 Service 发送给它的绑定客户端 它已经成功建立了自己的绑定并且其他资源。您可以通过使用从 Service 返回其客户端的广播 Intent 来执行此操作,或者您可以使用 2 向(回调)通信,具体取决于您已经在两者之间实现的通信方法你的 Service(s) 和他们的客户。

"ready notification" 应在客户端绑定后发送,直到客户端收到它需要 "wait" 的 "ready notification"(这可以通过显示进度通知或进度对话框来完成或 "initializing..." 对话框或动画或任何让用户忙碌的东西。