Кто является "клиентом" Сервиса - Контекстом или Сервисным Соединением?
Я нашел и прочитал различные посты здесь на SO, которые упоминают, что вы должны использовать getApplicationContext()
при привязке к Service
- вместо this
(в Activity
) или же getActivity()
(в Fragment
).
Тем не менее, это подняло для меня следующий вопрос: документация неоднократно говорит о "клиентах" Service
Например: "Когда служба не связана со всеми клиентами, система Android уничтожает ее" ( http://developer.android.com/guide/components/bound-services.html).
Что подразумевается под клиентом в этом контексте:
Context
который был использован для вызоваbindService()
- или
ServiceConnection
что было поставленоbindService()
Давайте предположим, у меня есть два Fragments
которые связаны с тем же Service
- используя контекст приложения и каждый со своим ServiceConnection
,
Когда Служба будет уничтожена?
Если мое второе толкование верно, то Service
будет уничтожен, когда все соединения закрыты, т.е. когда каждый фрагмент вызвал getActivity().getApplicationContext().unbindService(mConnection)
, Если первый из них равен true, он должен быть закрыт, как только первый фрагмент сделает этот вызов, потому что это "отсоединит контекст приложения"...
Итак, какая интерпретация верна? (Надеюсь, это второй...)
1 ответ
Ты используешь getApplicationContext()
таким образом ServiceConnection
выживает, например, изменения ориентации деятельности (деятельность разрушается и воссоздается, и это также делает ее контекст). Согласно документации, сервис может отключиться, когда работа остановлена (не уничтожена).
"Клиент" - это любой, кто имеет активный ServiceConnection
, Когда никто не подключен к сервису, он больше не нужен и поэтому уничтожается (если только он не запущен startService(...)
). ServiceConnection
Считаются не контексты.
Я не проверял, закрывается ли соединение автоматически, если указанный фрагмент уничтожен. Я предполагаю, что НЕТ, потому что контекст приложения выживает - вы должны явно отменить привязку в onDestroy
,