Ho una classe Application
in cui ho la precedenza su getApplicationContext()
.Quando viene chiamato getApplicationContext() della classe Application?
Ho cercato nel codice sorgente Android e non riesco a trovare da dove viene chiamato?
la gerarchia di ereditarietà è:
Application -> ContextWrapper -> Context
public abstract Context getApplicationContext();
getApplicationContext()
è un metodo astratto in Context
classe che viene sovrascritta in ContextWrapper
classe.
@Override
public Context getApplicationContext() {
return mBase.getApplicationContext();
}
mBase
è riferimento a un oggetto di tipo Context
che viene inizializzata nel costruttore di ContextWrapper ma secondo costruttore della classe del codice di applicazione passa nullo al costruttore di super()
cioè costruttore ContextWrapper
.
public Application() {
super(null);
}
Ora l'unico modo possibile per passare contesto è via:
protected void attachBaseContext(Context base) {
if (mBase != null) {
throw new IllegalStateException("Base context already set");
}
mBase = base;
}
ma non c'è nessuna chiamata a questo metodo sia. Per favore aiutami a scoprire che da dove viene chiamato getApplicationContext()
?
NOTA: Si prega di non inviare alcun collegamento a tali domande come ho passato attraverso ognuna di esse ma ancora nessuna risposta concreta.
selezionare 'ContextImpl' su grepcode out – Blackbelt
Sì, l'ho visto. Potresti per favore elaborare come funziona? – CodeWarrior