Diferencia entre Contexto de Actividad y Contexto de Aplicación

Esto me ha stumped, yo estaba usando esto en Android 2.1-r8 SDK:

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

Y también en

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

Usando getApplicationContext() bloquea tanto ProgressDialog y 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 la expresión "Contexto"?

7 Solutions collect form web for “Diferencia entre Contexto de Actividad y Contexto de Aplicación”

Ambos son instancias de contexto , 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. 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 deberías usar esto si necesitas un contexto cuyo ciclo de vida esté separado del contexto actual. Esto no se aplica en ninguno de sus ejemplos.

El contexto de Actividad presumiblemente tiene alguna información sobre la actividad actual que es necesaria para completar esas llamadas. Si muestra el mensaje de error exacto, puede ser capaz de señalar qué necesita exactamente.

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

He encontrado esta tabla super útil para decidir cuándo utilizar diferentes tipos de contextos:

Introduzca aquí la descripción de la imagen

  1. Una aplicación puede iniciar una actividad desde aquí, pero requiere que se cree una nueva tarea. Esto puede coincidir con casos de uso específicos, pero puede crear comportamientos no estándar de la pila trasera 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 hará con el tema predeterminado para el sistema en el que se está ejecutando, no lo que se define en la aplicación.
  3. Se permite si el receptor es nulo, que se utiliza para obtener el valor actual de una emisión pegajosa, en Android 4.2 o superior.

Artículo original aquí .

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

La razón por la que pienso es que ProgressDialog está unido a la actividad que apoya el ProgressDialog como el diálogo no puede permanecer después de la actividad se destruye por lo que debe ser pasado este (ActivityContext) que también se destruye con la actividad mientras que el applicationcontext sigue siendo incluso después La actividad va.

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 (tostada, servicio de telefonía, contacto …) nosotros Podría utilizar un contexto de aplicación

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

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

Si utiliza Activity, la nueva instancia Activity tendrá una referencia, que tiene una referencia implícita a la antigua Activity, y la antigua Activity no puede ser recolectada.

  • Uso del contexto para iniciar otra actividad
  • ¿Cuándo se llama a getApplicationContext () de la clase Application?
  • Obtener contexto en la biblioteca de Android
  • Cómo iniciar una Intención si el contexto no es Contexto de la Actividad pero Contexto de la Aplicación
  • Todavía la confusión sobre el contexto
  • Determinar si el contexto es una actividad específica
  • Cómo pasar el contexto de la aplicación dentro Singleton y SharedPreferences Clases
  • Cómo obtener el contexto de BaseAdapter en Android
  • ¿Cuál es la diferencia entre esto, getContext () y getActivity ()?
  • Context.getSystemService () es una llamada costosa?
  • OnBind () en servicio siempre devuelve Falso - Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.