У меня есть код в Activity, который использует getApplication(). BindService() или просто bindService(). Предпочтительнее другого. Учитывая, что Activity имеет жизненные циклы, по какому сценарию будет использоваться контекст приложения для запуска/привязки к службе.Какой контекст для вызова startService
ответ
Для связи с услугой, связанной с деятельностью, используйте контекст Application
(getApplication()
). Это связано с тем, что сама привязка представляет состояние, которое должно обрабатываться как часть обработки изменения конфигурации (например, через onRetainNonConfigurationInstance()
). Один экземпляр действия может связываться, но тогда вы не сможете отменить привязку до изменения конфигурации. Использование Activity
в качестве Context
для bindService()
может ввести утечку памяти (новое действие косвенно ссылается на исходную активность, связанную с сервисом).
Однако , начиная с, услуга, связанная с деятельностью, не связана с состоянием, связанным с каркасом. Следовательно, запуск службы с использованием startService()
по самой деятельности должен быть прекрасным.
честно, я никогда не видел никаких «операций», которые вызывают 'bindService' в контексте« Application », запросы' bind'/'unbind' должны быть спарены, чтобы не было никаких шансов на утечку ... – pskink
@pskink: Если вы отвязавшись от старой активности, служба может быть отключена, прежде чем вы сможете снова связать себя с новым действием, как часть изменения конфигурации. Теперь, если вы уверены, что что-то еще поддерживает работу службы (например, она связана и запущена), возможно, это не проблема. – CommonsWare
Отметьте этот ответ [link] (http://stackoverflow.com/questions/6446221/get-context-in-a-service), он имеет некоторые разъяснения по поводу двух понятий. –