2009-06-09 9 views
23

Sto scherzando con i servizi Android e ho riscontrato che ServiceConnection.onServiceConnected() viene chiamato in modo abbastanza prevedibile quando eseguo il bind a un servizio.Quando viene chiamato ServiceConnection.onServiceDisconnected()?

Tuttavia, il mio metodo onServiceDisconnected() sembra mai essere chiamato, anche dopo la VM muore.

ho connesso messaggi di debug sul servizio e dimostrare che tutte le discussioni sono stati l'arresto, ecc So che i servizi sono implementati come processi; ci sono dei thread che non conosco che impediscono l'uscita del processo?

risposta

24

Accade in caso di arresto anomalo del servizio remoto. Pertanto, se un servizio in esecuzione in un processo diverso da quello del client non riesce su alcune eccezioni, si perde la connessione e si ottiene la richiamata.

+2

È solo in caso di incidente? Mi aspetterei che venga chiamato quando chiamo 'unbindService()' e il servizio termina perché non ci sono più client. – sehugg

+3

secondo la documentazione succede solo sul 'servizio inaspettato non vincolante', quindi sì, è solo il crollo, e non su unbindService() – reflog

+2

Quindi, come si può sapere se si può effettivamente associare nuovamente al servizio? O meglio, come riesci a rebind? Uing una nuova ServiceConnection? – Snicolas