Дифференциальные правила использования Android getBaseContext, getApplicationContext или использование Activity "this"
Я много раз задавал этот вопрос и нашел много разных рекомендаций о том, когда использовать getBaseContext, getApplicationContext или собственный этот указатель.
Три правила, которые часто возникают и, похоже, имеют большой смысл, -
- Для долговременной ссылки на
контекстная деятельность
getApplicationContext следует использовать
поскольку это существует до тех пор, пока
приложение существует
- Для контекстов, жизненные циклы которых
связанные с их деятельностью, свои
контекст активности (this) должен быть
б
- Сохранять контекстные указатели статически
только с большой осторожностью (и, если
возможно, совсем нет)
Предполагая, что это правильно, что такое использование getBaseContext?
Я видел много примеров, когда новые намерения создаются с помощью -
Intent intent = new Intent(getBaseContext(), myClass.class);
В отличие от -
Intent intent = new Intent(this, myClass.class);
Каков правильный или рекомендуемый метод и почему?
Ответы
Ответ 1
Метод getBaseContext() - это метод ContextWrapper. ContextWrapper - "Проксирование реализации контекста, который просто делегирует все свои вызовы другому Контексту. Может быть подклассифицирован для изменения поведения без изменения исходного контекста". (согласно javadocs)
Таким образом, это используется для делегирования вызовов в другой контекст.