La mia app utilizza un servizio fornito da un'altra (delle mie) app. Sto usando uno spirito bound service con un Messenger
per accedere e comunicare con esso (e poiché è un'app diversa, è anche un servizio remoto).bindService() restituisce false ma unbindService() deve essere chiamato?
Quando chiamo bindService
con un intento corretta, e la chiamata restituisce false
(come previsto quando l'APK che fornisce il servizio non è in giro), ho assunto dalla documentazione e il codice di esempio, che io non ho bisogno di unbind
il ServiceConnection
. Tuttavia, quando lo faccio sul mio dispositivo Galaxy Nexus (Jelly Bean), ricevo il noto messaggio ServiceConnectionLeaked
al termine dello Activity
.
ho recuperato che questo facendo
if (!ctxt.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE)) {
try {
ctxt.unbindService(serviceConnection);
} catch (Throwable t) {}
// Clean up
return;
}
// Store serviceConnection for future use
sono curioso: Ho appena perso qualcosa nella documentazione e se è dovuto lavorare in questo modo? Ho aggiunto try ... catch
per assicurarmi che anche se questo comportamento è effettivamente diverso su altri dispositivi o versioni di Android, la mia app non ne è influenzata negativamente.
Grazie per la risposta, ma non è ancora coerente con i campioni (ad esempio RemoteService in ApiDemos fa anche non associare solo se 'onServiceConnected()' è stato chiamato). Tuttavia, poiché con il tuo aiuto ora posso vedere che anche la descrizione di alto livello sembra consentire una tale interpretazione, accetterò la risposta. – Stephan