¿Qué es el método getBaseContext en Android?

El método getBaseContext() solo es relevante cuando tienes un ContextWrapper .

Android proporciona una clase ContextWrapper que se crea alrededor de un Contexto existente usando:

ContextWrapper wrapper = nuevo ContextWrapper (contexto);

El beneficio de usar un ContextWrapper es que le permite “modificar el comportamiento sin cambiar el contexto original”. Por ejemplo, si tiene una actividad llamada myActivity , puede crear una View con un tema diferente a myActivity :

ContextWrapper customTheme = new ContextWrapper (myActivity) {
@Anular
public Resources.Theme getTheme () {
devuelve someTheme;
}
}
Ver myView = nuevo MyView (customTheme);

ContextWrapper es realmente poderoso porque le permite anular la mayoría de las funciones proporcionadas por Context, incluido el código para acceder a los recursos (por ejemplo, openFileInput() , getString() ), interactuar con otros componentes (por ejemplo, sendBroadcast() , registerReceiver() ), solicita permisos (por ejemplo, checkCallingOrSelfPermission() ) y la resolución de ubicaciones del sistema de archivos (por ejemplo, getFilesDir() ). ContextWrapper es realmente útil para solucionar problemas específicos del dispositivo / versión o para aplicar personalizaciones únicas a componentes como Vistas que requieren un contexto.

El método getBaseContext() se puede utilizar para acceder al Context “base” que ContextWrapper envuelve. Es posible que deba acceder al contexto “base” si necesita, por ejemplo, verificar si es un Service , Activity o Application :

clase pública CustomToast {
public void makeText (contexto de contexto, int resId, int duración) {
while (context instanceof ContextWrapper) {
context = context.baseContext ();
}
if (instancia de contexto de servicio)) {
lanzar nueva RuntimeException (“No se puede llamar a esto desde un servicio”);
}

}
}

O si necesita llamar a la versión “sin envolver” de un método:

La clase MyCustomWrapper extiende ContextWrapper {
@Anular
getWallpaper public Drawable () {
if (BuildInfo.DEBUG) {
return debugBackground;
} más {
return getBaseContext (). getWallpaper ();
}
}
}

Hola,

getBaseContext () es un método de la clase ContextWrapper. Su superclase es Context.

Si desea ver la implementación del método getBaseContext ().

/ ** * @return el contexto base establecido por el constructor o setBaseContext * / public Context getBaseContext () {
devolver mBase;
}

mBase es un tipo de datos de contexto abstracto. Como sabemos, esa súper clase del componente Actividad es ContextThemeWrapper que extiende ContextWrapper.

Entonces, cuando pasamos Context como this / .this. es equivalente a getBaseContext ().

PS getBaseContext () se refiere a Activity.this. Una vez que la actividad destruya, también destruirá.

getBaseContext() es el método de ContextWrapper . Y ContextWrapper es, ” Implementación ContextWrapper de Context que simplemente delega todas sus llamadas a otro Context. Se puede subclasificar para modificar el comportamiento sin cambiar el Context original ” (según javadocs)

Básicamente, úselo si necesita acceder a un Contexto desde otro contexto, use ContextWrapper. El contexto al que se hace referencia desde dentro de ese ContextWrapper se accede a través de getBaseContext ().

¡Espero que esto ayude! ¡Buena suerte!

getBaseContext () y . Esto dará el contexto de la actividad, que es igual para casi todos los casos. El uso de Context es que las vistas pueden obtener temas y recursos de él. Entonces, en caso de que su actividad sea del tipo AppCompatActivity o algo así, use .this para que recoja el tema correcto. Para uso genérico, getBaseContext () y . Esto dará el mismo resultado