Ответ 1
Вы должны использовать Activity
или Service
Context
, т.е. 'this'
, если у вас нет ясной и сильной причины. Используйте ApplicationContext
только в том случае, если вам явно нужна ссылка на глобальное состояние вашего приложения.
Из документов API разработчиков Android в ContextWrapper's
getApplicationContext()
метод:
Это обычно нужно использовать, если вам нужен контекст, жизненный цикл которого отделен от текущего контекста, связанного с временем жизни процесса, а не с текущим компонентом.
и
с использованием ApplicationContext (...) [в отличие от, например, контекст активности или службы] может легко привести к серьезным утечкам, если вы забудете отменить регистрацию, отменить привязку и т.д.
Например, чтобы получить SharedPreferences
в Activity
, например, измените данные, отображаемые пользователю, используйте this.getSharedPreferences(...)
, так как нет четкой причины, по которой вам нужно будет использовать жизненный цикл приложения. То же самое, в Service
, используйте this.getSharedPreferences(...)
. (Обратите внимание, что Activity и Service являются Контекстами. Они косвенно расширяют android.content.Context
)
CommonsWare написал подробный ответ: Когда вызывать контекст активности или контекст приложения?, где он делает случай, что вызов getApplicationContext() "is almost always wrong"
и очертания несколько исключений, когда его использовать:
- привязка к службе из Activity.
- что-то должно быть привязано к контексту с глобальной областью.
CommonsWare также ссылается на ответ разработчиком Android Framework Engine Dianne Hackborn:
Первое правило, которое я бы вам дал: если вы не знаете, зачем вам [контекст приложения], вам, вероятно, он не нужен (...) Единственный раз, когда вы хотите использовать getApplicationContext(), - это когда вы нужен Контекст, который существует вне жизненного цикла класса Activity (или другого компонента).
Дополнительные ответы на один и тот же вопрос с обсуждениями, относящимися к ApplicationContext
: