2012-04-27 20 views
97

Soy nuevo en Android y estoy tratando de entender la diferencia entre getApplication(), getApplicationContext(), getBaseContext(), getContext() y someClass.this y especialmente cuando se usan estos métodos en las siguientes líneas de código:diferencia y cuándo utilizar getApplication(), getApplicationContext(), getBaseContext() y someClass.this

Cuando abro una tostada, ¿cuál es la diferencia entre estos y en qué casos debo usarlos?

Toast.makeText(LoginActivity.this, "LogIn successful", Toast.LENGTH_SHORT).show(); 
Toast.makeText(getApplication(), "LogIn successful", Toast.LENGTH_SHORT).show(); 
Toast.makeText(getApplicationContext(), "LogIn successful", Toast.LENGTH_SHORT).show(); 
Toast.makeText(getBaseContext(), "LogIn successful", Toast.LENGTH_SHORT).show(); 

mismo con intentos:

Intent intent = new Intent(getApplicationContext(), LoginActivity.class); 
Intent intent = new Intent(MenuPagina., LoginActivity.class); 
Intent intent = new Intent(getBaseContext(), LoginActivity.class); 
Intent intent = new Intent(getApplication(), LoginActivity.class); 
+0

Posible duplicado de http://stackoverflow.com/q/1026973/741249 o http: // stackoverflow.com/q/6854265/741249 – THelper

+0

solo manejan el contexto y baseContext. pero me gustaría entender todos sus usos en los 2 contextos. gracias – Pheonix7

Respuesta

177

Tostada y Intención, tanto requiere referencia a contexto. Y getApplication, getApplicationContext, LoginActivity.this y getBaseContext, todos ellos ofrecen referencia al contexto.

Ahora lo que confunde es la declaración de diferentes contextos y su uso específico. Para simplificar, debe contar dos tipos de contexto disponibles en el marco de Android.

  1. contexto de aplicación
  2. Actividad Contexto

Contexto de aplicación se une al ciclo de vida de la aplicación y siempre será igual a través de la vida de la aplicación. Por lo tanto, si usa Toast, puede usar el contexto de la aplicación o incluso el contexto de actividad (ambos) porque se puede generar un brindis desde cualquier lugar con en su aplicación y no está adjunto a una ventana.

Actividad contexto se une al ciclo de vida de la actividad y puede ser destruido si se eleva de onDestroy() la actividad. Si desea iniciar una nueva actividad, debe necesitar utilizar el contexto de la actividad en su Intento para que la nueva actividad de inicio esté conectada a la actividad actual (en términos de la pila de actividades). Sin embargo, también puede usar el contexto de la aplicación para iniciar una actividad nueva, pero luego debe establecer el indicador Intent.FLAG_ACTIVITY_NEW_TASK con la intención de tratarlo como una tarea nueva.

ahora referencia a los casos:

LoginActivity.this aunque su referencia a su propia clase que se extiende Clase de actividad, pero la clase base (Actividad) también se extiende la clase de contexto, por lo que se puede utilizar para ofrecer contexto de actividad.

getApplication() aunque hace referencia al objeto Aplicación, pero la clase Aplicación extiende la clase Contexto, por lo que se puede utilizar para ofrecer el contexto de la aplicación.

getApplicationContext() ofrece contexto de la aplicación.

getBaseContext() ofrece un contexto de actividad.

Consejos: Siempre que necesite para manipular Views y luego ir por Actividad Contexto, de lo contrario contexto de aplicación sería suficiente.

+10

así que si lo hago bien, someClass.this, getBaseContext y getContext() son contextos de actividad, mientras que getApplicationContext() y getApplication() son contextos de aplicación? – Pheonix7

+3

sí. su suposición es correcta – waqaslam

+0

contexto es solo información sobre un entorno ¿verdad? – committedandroider

6
LoginActivity.this 

la línea anterior es una actividad que es obeveously un contexto .. esto se utiliza cuando se crea algunas AlertDialogs ... En algunos lugares su obligatorio que utilice Contexto Actividad ...

getApplication() 

lo mismo aquí el método de texto maquillaje necesita Contexto y aplicación en sí implementa Context

getApplicationContext() 

Thi s es la forma más preferida ya que este Context vive hasta que la aplicación se apaga.

getBaseContext() 

este contexto está disponible para los widgets y Vistas ..

pero todos ellos da un contexto objeto y nada más ..

+0

por lo que en un mensaje de brindis o al crear un intento, todos tienen el mismo efecto aunque el uso de getApplicationContext() es el más correcto? – Pheonix7

+1

@Hassan Samii: para Toast, puede usar 'getApplicationContext()' para todas las situaciones, pero es preferible que use 'this' para hacer Toast en una actividad. – ChuongPham

21

La respuesta por Waqas es muy clara y completa, sin embargo, me gustaría aclarar aún más la diferencia entre usar this contra getBaseContext(), o getApplication() contra getApplicationContext(). Tanto Activity y se extiende ApplicationContext sí, pero ContextWrapper, que es un

"Realizar una aproximación de ejecución de Context que simplemente delegados de todas sus llamadas a otro Context".

Ese contexto "real" es lo que obtienes al usar getBaseContext().

Así que, aunque this (por Activity) y getBaseContext() ambos dan el contexto de actividad, que

  • (a) no se refieren al mismo objeto (this != getBaseContext()) y
  • (b) el contexto llamar a través this es ligeramente menos eficiente, ya que las llamadas pasan por un nivel adicional de indirección. Sin embargo, dudo que tenga alguna diferencia práctica.

La misma lógica se aplica a getApplication() frente a getApplicationContext().

+0

En lo que se refiere a 'getBaseContext()', los Desarrolladores de Android de Google sugirieron esto: "No use getBaseContext(), solo use el Contexto que tenga". Entonces, en efecto, sugieren que use 'this' para Actividades. – ChuongPham

+0

esta es la explicación más clara de 'getBaseContext' que encontré en Internet. ¡¡Gracias!! – q126y

0

Class.this utilizarse si su clase extiende Actividad GetApplication() utilizado referirse aplicación y aplicación se extiende contexto de aplicación getbasecontext() se refieren a su contexto de actividad contexto se refiere a su contexto ciclo de vida de la actividad Application Context referirse a su ciclo de vida de aplicaciones

Cuestiones relacionadas