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