Pregunta muy interesante Creo que es principalmente un significado semántico, y también puede deberse a razones históricas.
Aunque en las implementaciones actuales de Android Activity and Service, getApplication()
y getApplicationContext()
devuelve el mismo objeto, no hay garantía de que este sea siempre el caso (por ejemplo, en una implementación específica del proveedor).
Entonces, si desea la clase de Aplicación que registró en el Manifiesto, nunca debe llamarla getApplicationContext()
y enviarla a su aplicación, porque puede que no sea la instancia de la aplicación (que obviamente experimentó con el marco de prueba).
¿Por qué getApplicationContext()
existe en primer lugar?
getApplication()
solo está disponible en la clase Actividad y la clase Servicio, mientras que getApplicationContext()
se declara en la clase Contexto.
Eso realmente significa una cosa: cuando se escribe código en un receptor de difusión, que no es un contexto pero se le da un contexto en su método onReceive, solo puede llamar getApplicationContext()
. Lo que también significa que no se garantiza que tenga acceso a su aplicación en un BroadcastReceiver.
Cuando mira el código de Android, ve que cuando se adjunta, una actividad recibe un contexto base y una aplicación, y esos son parámetros diferentes. getApplicationContext()
delegados a los que está llamado baseContext.getApplicationContext()
.
Una cosa más: la documentación dice que en la mayoría de los casos, no debería necesitar subclasificar la aplicación:
Normalmente no hay necesidad de subclase Application
. En la mayoría de las situaciones, los singletons estáticos pueden proporcionar la misma funcionalidad de una manera más modular. Si su singleton necesita un contexto global (por ejemplo, para registrar receptores de difusión), se le puede asignar a la función para recuperarlo una
Context
que se usa internamente Context.getApplicationContext()
cuando se construye el singleton por primera vez.
Sé que esta no es una respuesta exacta y precisa, pero aún así, ¿eso responde a su pregunta?
Application
objeto en su aplicación.