Cualquier desarrollador Android se ha encontrado con el problema de tener que utilizar la referencia de la propia Actividad en lugar de utilizar getApplicationContext(). Tanto Activity como getApplicationContext() son instancias de Context, pero la diferencia es que Activity tiene el contexto de la propia Activity, y getApplicationContext() es el Contexto de la Aplicación.
Una aplicación Android tiene varios tipos de Contexto, tales como:
- Actividad
- Aplicación
- Servicio
- Receptor de emisiones
- Proveedor de contenidos
¿Cuándo utilizar Activity, getApplicationContext() y etc?
Tras investigar un poco, encontré una tabla que indica cuándo utilizar cada caso:
Aplicación | Actividad | Servicio | Proveedor de contenidos | Receptor de emisiones | |
---|---|---|---|---|---|
Mostrar un diálogo | NO | SÍ | NO | NO | NO |
Iniciar una actividad | NO1 | SÍ | NO1 | NO1 | NO1 |
Inflación del trazado | NO2 | SÍ | NO2 | NO2 | NO2 |
Iniciar un servicio | SÍ | SÍ | SÍ | SÍ | SÍ |
Vinculación a un servicio | SÍ | SÍ | SÍ | SÍ | NO |
Enviar una emisión | SÍ | SÍ | SÍ | SÍ | SÍ |
Registrar BroadcastReceiver | SÍ | SÍ | SÍ | SÍ | NO3 |
Valores de los recursos de carga | SÍ | SÍ | SÍ | SÍ | SÍ |
- Una aplicación PUEDE iniciar una Actividad desde aquí, pero requiere que se cree una nueva tarea. Esto puede ajustarse a casos de uso específicos, pero puede crear comportamientos de pila posterior no estándar en su aplicación y, por lo general, no se recomienda ni se considera una buena práctica.
- Esto es legal, pero la inflación se hará con el tema por defecto para el sistema en el que se está ejecutando, no lo que está definido en su aplicación.
- Permitido si el receptor es nulo, que se utiliza para obtener el valor actual de una emisión pegajosa, en Android 4.2 y superiores.
Fuente: https://possiblemobile.com/2013/06/context/