2014-11-10 1 views
1

я нашел и прочитал различные посты здесь на SO, которые упоминают вы должны использовать getApplicationContext() при привязке к Service - вместо this (в качестве Activity) или getActivity()Fragment).Кто является «клиентом» Сервиса - Контекстом или ServiceConnection?

Однако для меня возник следующий вопрос: документация неоднократно говорит о «клиентах» Service, например: «Когда служба отключена от всех клиентов, система Android уничтожает ее» (http://developer.android.com/guide/components/bound-services.html).

Что подразумевается под клиента в этом контексте:

  • Context, который был использован для вызова bindService()
  • или ServiceConnection, который поставляется в bindService()

Давайте предположим, что у меня есть два Fragments которые привязаны к тому же Service - с использованием контекста приложения и каждый со своим собственным ServiceConnection.

Когда будет уничтожена Служба?

Если моя вторая интерпретация истинна, то Service будет уничтожен, когда все соединения будут закрыты, то есть когда каждый фрагмент вызвал getActivity().getApplicationContext().unbindService(mConnection). Если первое верно, оно должно быть закрыто, как только первый фрагмент сделает этот вызов, потому что это «отвяжет контекст приложения» ...

Итак, какая интерпретация истинна? (Я надеюсь, что это второй ...)

ответ

1

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

«Клиент» - это любой, кто имеет активный ServiceConnection. Когда никто не подключен к службе, он больше не нужен и, следовательно, уничтожается (если также не начато startService(...)). ServiceConnection s засчитываются не в контексты.

Я не проверял, будет ли соединение автоматически закрываться, если указанный фрагмент уничтожен. Я думаю, что нет, потому что контекст приложения выживает - вы должны развязать явно в onDestroy.