Diferencia y cuándo usar getApplication (), getApplicationContext (), getBaseContext () y someClass.this

Soy nuevo en android y estoy tratando de entender la diferencia entre getApplication() , getApplicationContext( ), getBaseContext() , getContext() y someClass.this y sobre todo cuando utilizar estos métodos en las siguientes líneas de código:

Cuando lanzo un brindis, ¿cuál es la diferencia entre éstos y en qué casos 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); 

Toast and Intent , ambos requieren referencia al contexto . Y getApplication , getApplicationContext , LoginActivity.this y getBaseContext , todos ellos ofrecen referencia al contexto.

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

  1. Contexto de la aplicación
  2. Contexto de la actividad

El contexto de aplicación se adjunta al ciclo de vida de la aplicación y siempre será el mismo durante toda la vida de la aplicación. Por lo tanto, si está utilizando Toast , puede utilizar el contexto de la aplicación o incluso el contexto de la actividad (ambos) porque se puede generar un brindis desde cualquier lugar con su aplicación y no está conectado a una ventana.

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

Ahora refiriéndose a sus casos:

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

getApplication() aunque se refiera al objeto Application, pero la clase Application extiende la clase Context, por lo que puede utilizarse para ofrecer contexto de aplicación.

getApplicationContext() ofrece el contexto de la aplicación.

getBaseContext() ofrece un contexto de actividad.

Consejos: Siempre que necesite manipular Views , vaya a Activity-Context , de lo contrario Application-Context sería suficiente.

La respuesta de Waqas es muy clara y completa, sin embargo me gustaría aclarar más la diferencia entre el uso de 'este' vs getBaseContext (), o getApplication () vs getApplicationContext (). Tanto la Actividad como la Aplicación no se extienden a Context, sino a ContextWrapper, que es una "Implementación Proxying de Contexto que simplemente delega todas sus llamadas a otro Contexto". Ese contexto "real" es lo que obtienes utilizando getBaseContext ().

Por lo tanto, aunque 'this' (para Activity) y getBaseContext () dan el contexto de la actividad, (a) no se refieren al mismo objeto (esto! = GetBaseContext ()) y (b) Menos eficiente, ya que las llamadas pasan por un nivel extra de indirección. Dudo que haga alguna diferencia práctica, sin embargo.

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

 LoginActivity.this 

La línea anterior es una Actividad que obeveously es un Contexto .. esto se usa cuando se crean algunos AlertDialogs … En algunos lugares es obligatorio que se utilice Contexto de Actividad …

 getApplication() 

Mismo aquí el método make text necesita Context and Application implementa Context

 getApplicationContext() 

Esto es la manera más preferida ya que este Context vive hasta que la Aplicación se apague.

 getBaseContext() 

Este contexto está disponible para widgets y vistas.

Pero todos ellos dan un objeto Contexto y nada más ..

Class.this usado si su clase se extiende Actividad getapplication () used se refiere a la aplicación y la aplicación extiende el contexto de la aplicación getbasecontext () se refiere a su contexto de contexto de actividad se refieren a su contexto de ciclo de vida de la actividad applicationcontext se refieren al ciclo de vida de la aplicación

  • ¿Cómo puedo bloquear / matar una aplicación en ejecución?
  • Evento de sincronización con google calendar desde android
  • Compartir texto vía Intent en Facebook sin utilizar Facebook sdk
  • Permitir todos los vínculos 'market: //' desde una vista web para abrir Google Play Store
  • Cómo configurar el color de fondo para Textview de forma programática para otro archivo xml?
  • Obtener contactos actualizados en Android para sincronización de contactos
  • Iniciar ubicación Configuración intento de preferencias Archivo XML
  • Actividad de inicio de Android sin crear una nueva instancia
  • Qt para Android - el equivalente de startActivityForResult no funciona
  • Sqlite Cursor Asignación de ventana 2048 kb no
  • Android: el video se puede reproducir desde la galería pero cuando lo reproduzco usando el video de tipo Intent.ACTION_VIEW, no se puede reproducir
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.