Вы должны использовать 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"
и описывает несколько исключений, когда его использовать:
- привязка к Сервису из Деятельности.
- что-то нужнобыть привязанным к контексту с глобальной областью действия.
CommonsWare также ссылается на ответ инженера Android Framework Дайан Хэкборн:
Первое правилоЯ бы сказал вам: если вы не знаете, зачем вам нужен [Application Context], он вам, вероятно, не нужен (...) Единственный раз, когда вы хотите использовать getApplicationContext (), это когда вам нужен Context, который существует внежизненного цикла класса Activity (или другого компонента).
Дополнительные ответы на ту же тему с обсуждением вопросов, касающихся ApplicationContext
: