我想从这样的其他服务绑定服务:什么时候完全onServiceConnected有界服务会被调用?
public class ServiceA extends Service {
private ServiceB mDataService;
private boolean mIsBound;
@Override
public void onCreate(){
super.onCreate();
doBindService();
/* ... */
}
@Override
public void onStart(final Intent intent, final int startId){
/*...*/
}
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
mDataService = ((ServiceB.LocalBinder)service).getService();
}
public void onServiceDisconnected(ComponentName className) {
mDataService = null;
}
};
void doBindService() {
bindService(new Intent(ServiceA.this, ServiceB.class), mConnection, Context.BIND_AUTO_CREATE);
mIsBound = true;
}
void doUnbindService() {
if (mIsBound) {
unbindService(mConnection);
mIsBound = false;
}
}
}
这是一个简单的代码片段,我从GOOLGE的样品了:) 代码工作得很好,mDataService持有至ServiceB实例的引用,但有一件事我不明白:在onStart
的调用之后调用onServiceConnected
回调。正如我在Android的文档中看到的那样,the callback is running on the main thread - 但我能指望它会始终按照我的情况顺序发生吗? onCreate - > onStart - > onServiceConnected?
是。下面应该用大红色字母表示:**不要在等待服务连接时阻塞活动/服务启动器线程!**(好吧,不要阻止它,但是在服务绑定的情况下它会加倍) – snuk182
-1,开发指南是错误的。 'bindService()'确实返回一个值。从http://developer.android.com/reference/android/content/Context.html,“如果您已成功绑定到服务,则返回true;如果未建立连接,则返回false,因此您将不会收到服务对象“。 –