Что означает утечка сервисного соединения?

Я пишу службу для своего Android-приложения, и я пытаюсь понять, как работает механизм привязки. Если я привяжу свою службу в onCreate к активности, но я не отвяжу ее в onStop или onDestroy, я получаю ошибку:

android.app.ServiceConnectionLeaked: Service com.google.ipc.invalidation.ticl.android.AndroidInvalidationService has leaked ServiceConnection com.googl
                              e.i[email protected]4177f8f8 that was originally bound here

Итак, мой вопрос: в чем проблема с утечкой соединения, что я предотвращаю, отперев мой сервис?

Ответы

Ответ 1

Это происходит, когда ОС Android уничтожает Activity и обнаруживает, что ServiceConnection по-прежнему привязан к работающему Service, поэтому вам нужно отменить привязку сервиса перед уничтожением вашего Activity

Ответ 2

Обычно ваше приложение является единственным приложением, которое может получить доступ к вашему Сервису (или использовать его для него). Если вы уничтожаете приложение, пока эта Служба все еще работает, то у этого сервиса больше нет цели. Он будет существовать в памяти, потребляющей ресурсы, но ничего не делая. Отключая или останавливая службу, когда вы закончите, вы возвращаете эти ресурсы, чтобы их могли использовать другие приложения.

Подумайте о ребенке, который распространяет свои игрушки через комнату, а затем уходит. Все остальные в доме (родители, братья и сестры) не имеют для них никакого смысла и должны обойти все. Игрушки просто в пути. Если ребенок убирает их, то каждый может использовать комнату для чего угодно.

Надеюсь, что это поможет!

Ответ 3

Услуги все еще работают даже после закрытия активности. Поэтому вам нужно развязать ресурс в onStop или onDestroy.