1:bindService官方概述
很明显 通过Google官方文档描述,我们知道
1:bindService()的返回值只是表明服务是否存在;
2:真正能代表是否成功绑定服务的是触发onServiceConnected()回调。
文档还有这么一句话
所谓异步操作,即我们执行完bindService(),并 不会马上回调onServiceConnected(),当然也不会等待它;而是按照程序的顺序继续执行。这时由于服务还未成功获取到,我们调用服务中的方法就会出错。
2:解决bindService异步问题
既然bindService是异步消息,即bindService线程在执行 bind服务后,会立即返回,如果bindService线程在主线程的话,要及时处理绑定服务后消息,那么我们可以通过开启子线程方式去获取服务是否已经绑定成功
new Thread(new Runnable() {
@Override
public void run() {
while(true){
Utils.delay(20);
//等待取得mService
if(null != mService){
// 绑定服务成功了
}
//...
}
}
}).start();