onBind 和服务连接?

Posted

技术标签:

【中文标题】onBind 和服务连接?【英文标题】:onBind and Service connect? 【发布时间】:2011-09-28 20:28:11 【问题描述】:

绑定到远程服务后似乎有一点延迟。 onServiceConnection 工作正常。绑定工作正常。我认为只是延迟问题。例如,在我的活动的 onCreate() 方法中,例如:

注意 mConnection onServiceConnect() 正确设置了 mRemoteServiceStub。

bindService(mIntent, mConnection, Context.BIND_AUTO_CREATE); mRemoteServiceStub.doThis();

如果我运行它,我会收到一个错误,指出尚不存在连接。但是,如果我将 mRemoteServiceStub.doThis() 放在 onClickListener 的方法中,它会完美运行。因此,要么在 onCreate 活动完成运行之前不建立连接,要么建立连接存在延迟。

有人知道吗?

有没有办法延迟应用程序运行直到建立连接,这样我可以立即使用连接而无需触发。 (我的实现是正确的)

【问题讨论】:

你能发布你遇到的错误吗? 【参考方案1】:

如果我运行它,我会收到一条错误消息,指出尚不存在连接。

bindService() 不同步。在您的 ServiceConnection 对象上调用 onServiceConnected() 并且您从 IBinder 创建客户端代理之前,您不能使用您的存根。

有没有办法延迟应用程序运行直到建立连接,这样我可以立即使用连接而无需触发。

将依赖于 binder 的逻辑放入 onServiceConnected()

【讨论】:

好的,所以它没有同步回答我问题的第一部分。但是,我不能将依赖于活页夹的逻辑放在 onServiceConnected() 方法中。我应该说明这个事实。我正在创建一个内部应用程序开发工具包,该 api 处理所有 IPC 内容,因此它的用户可以在需要时调用依赖于 binder 的东西。考虑到这一点,我可以在 API 中处理它(在返回调用 apk 之前创建延迟)。谢谢。 @jjNford:“考虑到这一点,我可以在 API 中处理它(在返回调用 apk 之前创建延迟)”——这不太可能奏效,因为调用了 onServiceConnected()主应用程序线程,因此您的“延迟”只会阻止事件。任何“内部应用程序开发工具包”都必须支持事件驱动模型,用于用户输入和任何其他异步发生的事情。您的服务被绑定只是另一个事件。或者,摆脱服务,或切换到命令模式(即,通过startService() 发送工作)。 你说得对,那没用。交易是该服务在所需的 .apk 之前运行。该服务将在多个 apk 中使用并远程运行。我希望能够绑定到它,然后从我的 apk 调用其中的方法。我不知道如何解决这个问题...... @jjNford:将您的“内部应用程序开发工具包”重新设计为事件驱动,并将您依赖于 binder 的逻辑放入 onServiceConnected() 无法将诸如“刷新”逻辑之类的东西放在它通常所在的onResume() 中是一种负担。绑定必须是异步的并且总是在主线程上被回调的事实意味着必须围绕绑定到服务重构他们的应用程序,而不仅仅是自然地使用它。太糟糕了。

以上是关于onBind 和服务连接?的主要内容,如果未能解决你的问题,请参考以下文章

Android中 服务里的方法抽取成接口

Binder连接池

Binder连接池

Android基础总结

远程服务拒绝权限 onBind

IPC机制2