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
Contextche utilizza internamente Context.getApplicationContext()durante la prima costruzione del singleton.
So che questa non è una risposta esatta e precisa, ma risponde alla tua domanda?
Applicationoggetto nella propria app.