Неопределенные правила использования Android getBaseContext, getApplicationContext или действия «this» - PullRequest
41 голосов
/ 28 марта 2011

Я часто гуглил этот вопрос и нашел много разных рекомендаций о том, когда использовать getBaseContext , getApplicationContext или собственный этот указатель *1005* этого действия.

Три правила, которые часто встречаются и, кажется, имеют большой смысл:

  1. Для долговременной ссылки на контекстное действие следует использовать getApplicationContext поскольку оно существует до тех пор, пока существует ваше приложение
  2. Для контекстов, жизненные циклы которых связаны с их действиями, следует использовать их собственный контекст активности ( this )
  3. Storeконтекстные указатели статически только с большой осторожностью (и, если возможно, совсем не так)

Если они верны, то зачем использовать getBaseContext ?

Я видел очень много примеров, когда новые намерения создаются с использованием -

Intent intent = new Intent(getBaseContext(), myClass.class);

В отличие от -

Intent intent = new Intent(this, myClass.class);

Какой правильный или рекомендуемый метод и почему?

1 Ответ

13 голосов
/ 28 марта 2011

getBaseContext () является методом ContextWrapper. И ContextWrapper: «Прокси-реализация контекста, которая просто делегирует все свои вызовы другому контексту. Может быть разделена на подклассы для изменения поведения без изменения исходного контекста». (согласно javadocs)

Так что это используется для делегирования вызовов другому контексту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...