Domanda molto interessante. Penso che sia principalmente un significato semantico e potrebbe anche essere dovuto a ragioni storiche.
Sebbene nelle attuali implementazioni di attività e servizi Android getApplication()
e getApplicationContext()
restituisca lo stesso oggetto, non vi è alcuna garanzia che ciò avvenga sempre (ad esempio, in un'implementazione specifica del fornitore).
Quindi, se vuoi la classe Application che hai registrato nel Manifest, non dovresti mai chiamarla getApplicationContext()
e lanciarla nella tua applicazione, perché potrebbe non essere l'istanza dell'applicazione (che ovviamente hai provato con il framework di test).
Perché getApplicationContext()
esiste in primo luogo?
getApplication()
è disponibile solo nella classe Activity e nella classe Service, mentre getApplicationContext()
è dichiarato nella classe Context.
Questo in realtà significa una cosa: quando si scrive il codice in un ricevitore broadcast, che non è un contesto ma viene dato un contesto nel suo metodo onReceive, è possibile solo chiamare getApplicationContext()
. Ciò significa anche che non è garantito l'accesso alla propria applicazione in un BroadcastReceiver.
Quando guardi il codice Android, vedi che quando è collegata, un'attività riceve un contesto di base e un'applicazione, e questi sono parametri diversi. getApplicationContext()
delegati a cui è chiamata baseContext.getApplicationContext()
.
Ancora una cosa: la documentazione dice che nella maggior parte dei casi non è necessario sottoclassare l'Applicazione:
Normalmente non è necessario eseguire la sottoclasse Application
. Nella maggior parte dei casi, i singoli statici possono fornire la stessa funzionalità in un modo più modulare. Se il tuo singleton ha bisogno di un contesto globale (ad esempio per registrare i ricevitori di trasmissione), la funzione per recuperarlo può essere assegnata a un oggetto
Context
che utilizza internamente Context.getApplicationContext()
durante la prima costruzione del singleton.
So che questa non è una risposta esatta e precisa, ma risponde alla tua domanda?
Application
oggetto nella propria app.