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?
- La ejecución instantánea no funciona
- Seleccionar carpeta en el dispositivo Android
- ACTION_INSTALL_PACKAGE
- Inicio de mi aplicación mediante el URI de intención
- Uso de AlarmManager para actualizar widgets manualmente
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);
- ¿Cómo agregar texto a la grabación de video?
- Android: startActivityForResult & setResult para una clase de vista y una clase de actividad
- ¿Es mejor pasar los datos por intención o consultar la base de datos cuando sea necesario?
- Inicie el navegador predeterminado con los parámetros de intención y publicación
- Obtener notificación enviada por correo electrónico en onActivityResult "Android"
- ListView Selección de artículos Android
- La sustitución de url de Android no funciona en la redirección
- No se le permite iniciar el servicio Intención X sin permiso Y
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.
- Contexto de la aplicación
- 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 agregar Apache HTTP API (legacy) como dependencia de compilación a build.grade para Android M?
- Recursos de Android XXHDPI