getapplicationcontext context android android-context

android - getapplicationcontext - Diferencia entre contexto de actividad y contexto de aplicación



context en android (7)

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 la Actividad está vinculada al ciclo de vida de una Actividad. Por lo tanto, tienen acceso a información diferente sobre el entorno de la aplicación.

Si lees los documentos en getApplicationContext , observa que solo debes usar esto si necesitas un contexto cuyo ciclo de vida sea independiente del contexto actual. Esto no se aplica en ninguno de sus ejemplos.

El contexto de la actividad presumiblemente tiene cierta información sobre la actividad actual que es necesaria para completar esas llamadas. Si muestra el mensaje de error exacto, podría indicar qué necesita exactamente.

Pero en general, use el contexto de la actividad a menos que tenga una buena razón para no hacerlo.

Esto me ha dejado perplejo, lo estaba usando en Android 2.1-r8 SDK:

ProgressDialog.show(getApplicationContext(), ....);

y también en

Toast t = Toast.makeText(getApplicationContext(),....);

El uso de getApplicationContext() bloquea tanto ProgressDialog como Toast .... que me llevan a esta pregunta:

¿Cuáles son las diferencias reales entre el contexto de una actividad y el contexto de la aplicación, a pesar de compartir el texto ''Contexto''?


Creo que cuando todo necesita una pantalla para mostrar (botón, diálogo, diseño ...) tenemos que usar la actividad de contexto, y todo no necesita una pantalla para mostrar o procesar (brindis, servicio de teléfono, contacto ...) podría usar un contexto de aplicación


El motivo por el que creo que ProgressDialog se adjunta a la actividad que apunta a ProgressDialog ya que el diálogo no puede permanecer después de que la actividad se destruye, por lo que debe pasarse (ActivityContext) que también se destruye con la actividad, mientras que ApplicationContext permanece incluso después La actividad se destruye.


Encontré esta tabla muy útil para decidir cuándo usar diferentes tipos de Contextos:

  1. 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 no estándar de la contraportada en su aplicación y generalmente no se recomienda o se considera una buena práctica.
  2. Esto es legal, pero la inflación se realizará con el tema predeterminado para el sistema en el que se está ejecutando, no con lo que se define en su aplicación.
  3. Se permite si el receptor es nulo, que se utiliza para obtener el valor actual de una emisión fija, en Android 4.2 y superior.

Artículo original here .


Esto obviamente es deficiencia del diseño de la API. En primer lugar, el contexto de la actividad y el contexto de la aplicación son objetos totalmente diferentes, por lo que los parámetros del método donde se usa el contexto deberían usar ApplicationContext o Activity directamente, en lugar de usar el contexto de la clase principal. En segundo lugar, el documento debe especificar qué contexto usar o no explícitamente.


Use getApplicationContext () si necesita algo vinculado a un Contexto que en sí mismo tendrá un alcance global.

Si usa Actividad, entonces la nueva instancia de Actividad tendrá una referencia, que tiene una referencia implícita a la Actividad anterior, y la Actividad anterior no puede ser recogida de basura.


No puede mostrar una ventana / diálogo de aplicación a través de un contexto que no sea una actividad. Intenta pasar una referencia de actividad válida