У меня есть класс Application
, в котором я переопределяю getApplicationContext()
.Когда вызывается метод getApplicationContext() класса Application?
Я просмотрел исходный код Android, и я не могу найти, откуда он называется?
Иерархия наследования:
Application -> ContextWrapper -> Context
public abstract Context getApplicationContext();
getApplicationContext()
является абстрактным методом в Context
класса, который переопределен в классе ContextWrapper
.
@Override
public Context getApplicationContext() {
return mBase.getApplicationContext();
}
mBase
является ссылкой на объект типа Context
, который инициализируется конструктор ContextWrapper, но в соответствии с конструктором класса кода приложения в нуле переходит в конструктор super()
т.е. конструктора ContextWrapper
.
public Application() {
super(null);
}
Теперь единственный возможный способ передачи контекста является:
protected void attachBaseContext(Context base) {
if (mBase != null) {
throw new IllegalStateException("Base context already set");
}
mBase = base;
}
но нет никакого вызова этого метода либо. Пожалуйста, помогите мне найти то, что называется getApplicationContext()
?
ПРИМЕЧАНИЕ: Пожалуйста, не оставляйте ссылки на такие вопросы, как я прошел через каждый из них, но до сих пор нет конкретного ответа.
check 'ContextImpl' on grepcode out – Blackbelt
Да, я его видел. Не могли бы вы рассказать, как это работает? – CodeWarrior