Diferencia entre contexto de actividad y contexto de aplicación
Esto me tiene perplejo, estaba usando esto en el SDK de Android 2.1-r8:
ProgressDialog.show(getApplicationContext(), ....);
y también en
Toast t = Toast.makeText(getApplicationContext(),....);
el uso getApplicationContext()
se bloquea tanto ProgressDialog
y Toast
... lo que me lleva a esta pregunta:
¿Cuáles son las diferencias reales entre un contexto de actividad y un contexto de aplicación, a pesar de compartir la expresión "Contexto"?
Ambas son instancias de Context , pero la instancia de la aplicación está vinculada al ciclo de vida de la aplicación, mientras que la instancia de Actividad está vinculada al ciclo de vida de una Actividad. Así, tienen acceso a diferente información sobre el entorno de la aplicación.
Si lee los documentos en getApplicationContext , observará que solo debe usar esto si necesita un contexto cuyo ciclo de vida esté separado del contexto actual. Esto no se aplica en ninguno de sus ejemplos.
Es de suponer que el contexto de Actividad tiene alguna información sobre la actividad actual que es necesaria para completar esas llamadas. Si muestra el mensaje de error exacto, es posible que pueda indicar qué necesita exactamente.
Pero, en general, utilice el contexto de actividad a menos que tenga una buena razón para no hacerlo.
Esta tabla me pareció muy útil para decidir cuándo usar diferentes tipos de contextos:
- Una aplicación PUEDE iniciar una Actividad desde aquí, pero requiere que se cree una nueva tarea. Esto puede adaptarse a casos de uso específicos, pero puede crear comportamientos de back stack no estándar en su aplicación y, en general, no se recomienda ni se considera una buena práctica.
- Esto es legal, pero la inflación se realizará con el tema predeterminado para el sistema que está ejecutando, no con el que está definido en su aplicación.
- Permitido si el receptor es nulo, que se utiliza para obtener el valor actual de una transmisión fija, en Android 4.2 y superior.