Diferencia entre contexto de actividad y contexto de aplicación

Resuelto t0mm13b asked hace 54 años • 7 respuestas

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 ProgressDialogy 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"?

t0mm13b avatar Jan 01 '70 08:01 t0mm13b
Aceptado

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.

Cheryl Simon avatar Nov 08 '2010 22:11 Cheryl Simon

Esta tabla me pareció muy útil para decidir cuándo usar diferentes tipos de contextos:

ingrese la descripción de la imagen aquí

  1. 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.
  2. 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.
  3. 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.
CommonSenseCode avatar Feb 03 '2016 23:02 CommonSenseCode