Soy nuevo en Android y estoy tratando de entender la diferencia entre getApplication()
, getApplicationContext(
), getBaseContext()
, getContext()
y someClass.this
sobre todo cuándo utilizar los estos métodos en las siguientes líneas de código:
Cuando lanzo un brindis, ¿cuál es la diferencia entre estos y en qué casos los uso?
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();
lo mismo con las intenciones:
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);
android
android-intent
this
toast
android-context
Pheonix7
fuente
fuente
Respuestas:
Brindis e intención , ambos requieren referencia al contexto . Y getApplication , getApplicationContext , LoginActivity.this y getBaseContext , todos ofrecen referencias al contexto.
Ahora lo que confunde es la declaración de diferentes contextos y su uso específico. Para simplificar las cosas, debe contar dos tipos de contexto disponibles en el marco de Android.
El contexto de la 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. Entonces, si está utilizando Toast , puede usar el contexto de la aplicación o incluso el contexto de la actividad (ambos) porque se puede hacer un brindis desde cualquier lugar dentro de su aplicación y no se adjunta a una ventana.
El contexto de la actividad se adjunta al ciclo de vida de la actividad y puede destruirse si
onDestroy()
se eleva la actividad . Si desea lanzar 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 usar el contexto de la aplicación para iniciar una nueva actividad, pero luego debe establecer una marcaIntent.FLAG_ACTIVITY_NEW_TASK
con la intención de tratarla como una nueva tarea.Ahora refiriéndose a sus casos:
LoginActivity.this
aunque se refiere a su propia clase que extiende la clase de actividad, pero la clase base (Actividad) también extiende la clase de contexto, por lo que puede usarse para ofrecer contexto de actividad.getApplication()
aunque se refiere al objeto Aplicación, pero la clase Aplicación amplía la clase Contexto, por lo que se puede utilizar para ofrecer contexto de aplicación.getApplicationContext()
ofrece contexto de aplicación.getBaseContext()
ofrece contexto de actividad.fuente
Context
->ContextWrapper
-> 1.Application
& 2.ContextThemeWrapper
->Activity
; ygetBaseContext()
es método deContextWrapper
,getBaseContext() offers activity context.
así comoApplication Context
también ... ¿no es así?La respuesta por Waqas es muy clara y completa, sin embargo, me gustaría aclarar aún más la diferencia entre el uso
this
vsgetBaseContext()
, ogetApplication()
frentegetApplicationContext()
. AmbosActivity
yApplication
no se extienden aContext
sí mismos, peroContextWrapper
, que es unEse contexto "real" es lo que obtienes usando
getBaseContext()
.Entonces, aunque
this
(paraActivity
) ygetBaseContext()
ambos dan el contexto de la actividad,this != getBaseContext()
) ythis
es un poco menos eficiente, ya que las llamadas pasan por un nivel adicional de indirección. Sin embargo, dudo que haga alguna diferencia práctica.La misma lógica se aplica a
getApplication()
frentegetApplicationContext()
.fuente
getBaseContext()
respecta, los desarrolladores de Android de Google sugirieron esto: "No use getBaseContext (), solo use el contexto que tiene". Entonces, en efecto, sugieren que lo usethis
para Actividades.getBaseContext
que encontré en Internet. ¡¡Gracias!!la línea anterior es una Actividad que es obedientemente un Contexto ... esto se usa cuando creas algunos Diálogos de Alerta ... En algunos lugares es obligatorio que uses Contexto de Actividad ...
Lo mismo aquí, el método de creación de texto necesita el contexto y la aplicación se implementa
Context
esta es la forma más preferida, ya que
Context
permanece hasta que se cierra la aplicación.este contexto está disponible para widgets y vistas.
Pero todos dan un objeto Context y nada más.
fuente
getApplicationContext()
para todas las situaciones, pero es preferible que lo usethis
al hacer Toast en una actividad.Class.this se usa si su clase extiende Activity getapplication () usado referir aplicación y la aplicación extiende el contexto de la aplicación getbasecontext () refiera su contexto de contexto de actividad refiera su contexto de ciclo de vida de actividad contexto de la aplicación refiera a su ciclo de vida de aplicación
fuente