¿Cuál es la diferencia entre getContext(), getApplicationContext(), getBaseContext(), y " this"?
Aunque esta es una pregunta simple, no puedo entender la diferencia básica entre ellos. Por favor, da algunos ejemplos fáciles si es posible.
                    
                        android
                                this
                                android-context
                                
                    
                    
                        iCurious
fuente
                
                fuente

Respuestas:
View.getContext(): Devuelve el contexto en el que la vista se está ejecutando actualmente. Por lo general, la actividad actualmente activa.Activity.getApplicationContext(): Devuelve el contexto de toda la aplicación (el proceso en el que se ejecutan todas las actividades). Use esto en lugar del contexto de Actividad actual si necesita un contexto vinculado al ciclo de vida de toda la aplicación, no solo a la Actividad actual.ContextWrapper.getBaseContext(): Si necesita acceder a un contexto desde otro contexto, utilice ContextWrapper. El contexto al que se hace referencia desde dentro de ese ContextWrapper se accede a través de getBaseContext ().fuente
thisygetContext()no siempre son iguales, por ejemplo, en la clase Actividad, puede usarlothisporqueActivityheredaContextpero el métodogetContext()no está enActivityclase. @mikedroid @KCRajuLa mayoría de las respuestas ya cubren
getContext()ygetApplicationContext()pero getBaseContext () rara vez se explican.El método
getBaseContext()solo es relevante cuando tienes unContextWrapper. Android proporciona unaContextWrapperclase que se crea alrededor de una existenteContextusando:El beneficio de usar a
ContextWrapperes que te permite "modificar el comportamiento sin cambiar el contexto original". Por ejemplo, si tiene una actividad llamadamyActivity, puede crear unaViewcon un tema diferente amyActivity:ContextWrapperes realmente poderoso porque le permite anular la mayoría de las funciones proporcionadas alContextincluir código para acceder a recursos (por ejemploopenFileInput(),getString()), interactuar con otros componentes (por ejemplosendBroadcast(),registerReceiver()), solicitar permisos (por ejemplocheckCallingOrSelfPermission()) y resolver ubicaciones del sistema de archivos (por ejemplogetFilesDir()).ContextWrapperes 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 contexto "base" que
ContextWrapperenvuelve. Es posible que necesite acceder al contexto “base”, si es necesario, por ejemplo, comprobar si se trata de unaService,ActivityoApplication:O si necesita llamar a la versión "sin envolver" de un método:
fuente
ContextWrapperes una de las peores decisiones jamás tomadas por los desarrolladores de Android Framework. Cuando se dieron cuenta de que habían creado una familia completa de Objetos de Dios, en lugar de hacer lo correcto y refactorizar el código hacia la Responsabilidad Única, agregaron un truco feo que permitió cambiar el comportamiento del Contexto al profundizar el árbol de herencia. Mala ingeniería de software en su forma más fea. En cuanto a nosotros, los desarrolladores, en mi humilde opinión, nadie debería usargetBaseContext()oContextWrapper. Si lo hace, es un gran "olor a código".CustomToastcódigo completo . THANKS :)))fuente
La pregunta "cuál es el contexto" es una de las preguntas más difíciles en el universo de Android.
El contexto define métodos que acceden a los recursos del sistema, recuperan los activos estáticos de la aplicación, verifican los permisos, realizan manipulaciones de la interfaz de usuario y muchos más. En esencia,
Contextes un ejemplo de Dios Objeto antipatrón en producción.Cuando se trata de qué tipo de
Contextdeberíamos usar, se vuelve muy complicado porque, excepto por ser el Objeto de Dios, el árbol jerárquico de lasContextsubclases viola brutalmente el Principio de sustitución de Liskov.Esta publicación de blog intenta resumir la
Contextaplicabilidad de clases en diferentes situaciones.Permítanme copiar la tabla principal de esa publicación para completar:
fuente
Contextproporciona información sobre elActvityoApplicationlos componentes de nueva creación.Pertinente
ContextSe debe proporcionar a los componentes recién creados (ya sea el contexto de la aplicación o el contexto de la actividad)Como
Activityes una subclase deContext, uno puede usarthispara obtener el contexto de esa actividadfuente
De estos documentos
Comprendí que deberías usar:
fuente
getApplicationContext ()
getContext () y getBaseContext ()
esta
fuente
A
Contextes:fuente