Sto cercando di legare il servizio da un altro servizio come questo:Quando verrà chiamato esattamente onServiceConnected per il servizio limitato?
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;
}
}
}
Questo è un semplice frammento di che ho preso da campioni di Goolge :) Il codice funziona bene e mDataService contiene un riferimento a un'istanza ServiceB, ma c'è una cosa che non riuscivo a capire: il callback onServiceConnected
viene chiamato dopo la chiamata a onStart
. Come ho visto sui documenti di Android, the callback is running on the main thread - ma posso contare sul fatto che accadrà SEMPRE in questo ordine nel mio caso? onCreate -> onStart -> onServiceConnected?
Sì. E il seguente dovrebbe essere indicato con grandi lettere rosse da qualche parte: ** Non bloccare il thread di attività/service starter in attesa di una connessione di servizio! ** (beh, non bloccarlo mai, ma in caso di service binding è doppio peggiore) – snuk182
-1, la guida dev è errata. 'bindService()' restituisce un valore. Da http://developer.android.com/reference/android/content/Context.html, "se ci si è associati correttamente al servizio, viene restituito true, viene restituito false se la connessione non viene effettuata in modo da non ricevere oggetto di servizio. " –