【发布时间】:2012-02-03 15:55:38
【问题描述】:
Android 的 Context.bindService() 是异步的。即使它返回true,IBinder 也不会立即可用。你给它一个 ServiceConnection 对象,框架会回调它。至少应该是这样的。
有没有人遇到过 bindService() 返回true,但 onServiceConnected() 调用永远不会到来的情况?这是我必须考虑和防范的条件吗?
我要使用的服务是应用内结算。
【问题讨论】:
Android 的 Context.bindService() 是异步的。即使它返回true,IBinder 也不会立即可用。你给它一个 ServiceConnection 对象,框架会回调它。至少应该是这样的。
有没有人遇到过 bindService() 返回true,但 onServiceConnected() 调用永远不会到来的情况?这是我必须考虑和防范的条件吗?
我要使用的服务是应用内结算。
【问题讨论】:
如果您绑定到的服务与客户端在同一进程中运行(即本地服务),那么如果 bindService 返回 true,则没有实际理由不调用 onServiceConnected。如果服务在远程进程中运行,那么即使bindService返回true,至少有一个条件需要处理:如果远程进程崩溃,那么你会得到onServiceDisconnected,然后在系统重新启动服务时再次onServiceConnected再次,这可能需要一段时间。
您应该能够相信系统,如果 bind 返回 true,并且没有引发安全异常,您应该在合理的时间内获取 onServiceConnected。
【讨论】:
com.android.vendingAKA 市场应用程序中运行。