2009-06-09 2 views
23

Я возился с службами Android, и я обнаружил, что ServiceConnection.onServiceConnected() получает звание довольно предсказуемо, когда я привязываюсь к сервису.Когда вызывается вызов ServiceConnection.onServiceDisconnected()?

Однако мой метод onServiceDisconnected(), кажется, никогда не называется, даже после того, как VM умирает.

Я зарегистрировал отладочные сообщения в службе и показал, что все потоки завершены и т. Д. Я знаю, что службы реализованы как процессы; есть ли потоки, о которых я не знаю, которые препятствуют выходу процесса?

ответ

24

Это случается при краже удаленной службы. Таким образом, если служба, работающая в другом процессе, чем ваш клиент, выходит из строя с некоторым исключением, вы теряете соединение и получаете обратный вызов.

+2

Это просто на крахе? Я ожидаю, что он будет вызван, когда я буду называть 'unbindService()', и служба завершает работу, потому что клиентов больше нет. – sehugg

+3

в соответствии с документацией это происходит только при «неожиданном отключении службы», так что да, это только при сбое, и нет на unbindService() – reflog

+2

Итак, как вы можете узнать, можете ли вы действительно переустановить службу? Или лучше, как вы перепроверяете? Uing новый ServiceConnection? – Snicolas