Moja aplikacja korzysta z usług innych (moich) aplikacji. Korzystam z bound service z Messenger
, aby uzyskać do niego dostęp i komunikować się z nim (a ponieważ jest to inna aplikacja, jest to również usługa zdalna).bindService() zwraca wartość false, ale unbindService() musi zostać wywołana?
Kiedy zadzwonić bindService
z właściwą intencją, a wywołanie zwraca false
(zgodnie z oczekiwaniami, gdy APK świadczenia usługi nie ma w pobliżu), Przypuszczałem z dokumentacją i kodem przykład, że nie muszę się unbind
na ServiceConnection
. Jednak, kiedy robię to na moim urządzeniu Galaxy Nexus (Jelly Bean), otrzymuję dobrze znany komunikat ServiceConnectionLeaked
po zakończeniu Activity
.
mam uratowane, że wykonując
if (!ctxt.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE)) {
try {
ctxt.unbindService(serviceConnection);
} catch (Throwable t) {}
// Clean up
return;
}
// Store serviceConnection for future use
jestem ciekaw: czy po prostu brakuje czegoś w dokumentacji i jest to ma działać w ten sposób? Dodałem try ... catch
, aby upewnić się, że nawet jeśli to zachowanie jest rzeczywiście inne na innych urządzeniach lub wersjach Androida, moja aplikacja nie jest nim (negatywnie).
Dzięki za odpowiedź, ale to nadal nie jest zgodny z próbek (np RemoteService w ApiDemos czy też tylko rozpiąć jeśli 'onServiceConnected()' nazywano). Ponieważ jednak z twoją pomocą mogę teraz zobaczyć, że nawet opis wysokiego poziomu wydaje się dopuszczać taką interpretację, przyjmuję odpowiedź. – Stephan