Pregunta ¿Qué es 'Contexto' en Android?


En la programación de Android, ¿qué es exactamente un Context clase y para qué se utiliza?

Lo leí en el sitio del desarrollador, pero no puedo entenderlo claramente.


1576
2017-08-26 06:12


origen


Respuestas:


Poniéndolo simplemente:

Como su nombre indica, es el contexto del estado actual de la aplicación / objeto. Permite que los objetos recién creados comprendan lo que ha estado sucediendo. Normalmente lo llama para obtener información sobre otra parte de su programa (actividad y paquete / aplicación).

Puedes obtener el contexto invocando getApplicationContext(), getContext(), getBaseContext() o this (cuando está en una clase que se extiende desde Context, como las clases Application, Activity, Service y IntentService).

Usos típicos del contexto:

  • Creando nuevos objetos: Creando nuevas vistas, adaptadores, oyentes:

    TextView tv = new TextView(getContext());
    ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);
    
  • Acceder a los recursos comunes estándar: Servicios como LAYOUT_INFLATER_SERVICE, SharedPreferences:

    context.getSystemService(LAYOUT_INFLATER_SERVICE)
    getApplicationContext().getSharedPreferences(*name*, *mode*);
    
  • Acceder a los componentes implícitamente: Con respecto a los proveedores de contenido, las transmisiones, la intención

    getApplicationContext().getContentResolver().query(uri, ...);
    

1239
2017-08-26 06:32



Definición de contexto ::

  • El contexto representa los datos del entorno
  • Proporciona acceso a cosas como bases de datos

Términos más simples ::

  • Considere que Person-X es el CEO de una empresa de software de nueva creación.

  • Hay un arquitecto principal presente en la compañía, este arquitecto principal hace todo el trabajo en la empresa que involucra como base de datos, interfaz de usuario etc.

  • Ahora el CEO contrata un nuevo desarrollador.

  • Es el arquitecto quien cuenta la responsabilidad del recién contratado persona basada en las habilidades de la nueva persona que si lo hará trabajar en la base de datos o interfaz de usuario, etc.

Términos más simples ::

  • Es como el acceso de la actividad de Android al recurso de la aplicación.

  • Es similar a cuando visita un hotel, quiere desayuno, almuerzo y cena en los horarios adecuados, ¿verdad?

  • Hay muchas otras cosas que te gustan durante el tiempo de estadía. Cómo obtener estas cosas?

  • Usted le pide a la persona del servicio de habitación que traiga estas cosas por usted.

  • Aquí la persona del servicio de habitación es el contexto considerando que usted es el actividad única y el hotel para ser su aplicación, finalmente el desayuno, el almuerzo y la cena tiene que ser los recursos.


Las cosas que involucran contexto son:

  1. Cargando un recurso
  2. Lanzar una nueva actividad.
  3. Creando vistas.
  4. obteniendo servicio del sistema

El contexto es la clase base para Actividad, Servicio, Solicitud .... etc

Otra forma de describir esto: Considere el contexto como remoto de un televisor y un canal en la televisión son recursos, servicios, uso de intenciones, etc. - - - Aquí el control remoto actúa como un acceso para obtener acceso a todos los recursos diferentes en primer plano.

  • Entonces, Remote tiene acceso a canales tales como recursos, servicios, uso de intenciones, etc.
  • Del mismo modo ..... Quien tiene acceso a control remoto, naturalmente, tiene acceso a todas las cosas, tales como recursos, servicios, uso de intenciones, etc.

Diferentes métodos mediante los cuales puedes obtener contexto

  • getApplicationContext()
  • getContext()
  • getBaseContext()
  • o this (cuando está en la clase de actividad)

Ejemplo:

TextView TV=new TextView(this);

this -> se refiere al contexto de la actividad actual.


408
2017-08-20 05:25



Fuente


El tema de Contexto en Android parece ser confuso para muchos. La gente simplemente sabe que el Contexto se necesita con bastante frecuencia para hacer cosas básicas en Android. Las personas a veces entran en pánico porque intentan realizar alguna operación que requiera el contexto y no saben cómo "obtener" el contexto correcto. Voy a tratar de desmitificar la idea de Contexto en Android. El tratamiento completo del problema está más allá del alcance de esta publicación, pero trataré de ofrecer una descripción general para que tenga una idea de qué es el contexto y cómo usarlo. Para entender qué es el contexto, echemos un vistazo al código fuente:

https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/Context.java

¿Qué es exactamente Contexto? 

Bueno, la documentación en sí proporciona una explicación bastante sencilla: la clase Contexto es una "Interfaz para información global sobre un entorno de aplicación".

La clase de contexto en sí se declara como clase abstracta, cuya implementación es proporcionada por el sistema operativo Android. La documentación proporciona además que Context "... permite el acceso a clases y recursos específicos de la aplicación, así como también llamadas para operaciones de nivel de aplicación, como actividades de inicio, transmisión y recepción de intentos, etc.".

Puede entender muy bien, ahora, por qué el nombre es Contexto. Es porque es solo eso. El Contexto proporciona el enlace o gancho, si lo desea, para una Actividad, Servicio o cualquier otro componente, lo que lo vincula al sistema, lo que permite el acceso al entorno de la aplicación global. En otras palabras: el contexto proporciona la respuesta a la pregunta de los componentes "¿dónde diablos estoy en relación con la aplicación en general y cómo accedo / me comunico con el resto de la aplicación?" Si todo esto parece un poco confuso, una rápida ver los métodos expuestos por la clase de Contexto proporciona algunas pistas adicionales sobre su verdadera naturaleza.

Aquí hay una muestra aleatoria de esos métodos:

  1. getAssets() 
  2. getResources()
  3. getPackageManager()
  4. getString()
  5. getSharedPrefsFile()

¿Qué tienen todos estos métodos en común? Todos ellos permiten que cualquiera que tenga acceso al Contexto pueda acceder a los recursos de toda la aplicación.

El contexto, en otras palabras, engancha el componente que tiene una referencia al resto del entorno de la aplicación. Los activos (piense en la carpeta '/ assets' en su proyecto), por ejemplo, están disponibles en toda la aplicación, siempre que una Actividad, Servicio o lo que sea sepa cómo acceder a esos recursos. Lo mismo vale para getResources() que permite hacer cosas como getResources().getColor() que te enganchará en el colors.xml recurso (no importa que aapt permita el acceso a los recursos a través del código java, eso es un problema aparte).

El resultado es que Context es lo que permite el acceso a los recursos del sistema y es lo que engancha los componentes en la "mayor aplicación". Veamos las subclases de Context, las clases que proporcionan la implementación del resumen Context clase. La clase más obvia es la Activity clase. Activityhereda de ContextThemeWrapper, que hereda de ContextWrapper, que hereda de Context sí mismo. Esas clases son útiles para comprender las cosas a un nivel más profundo, pero por ahora es suficiente saber que ContextThemeWrapper y ContextWrapper son más o menos como suenan. Implementan los elementos abstractos de la Context Clasificarse a sí mismo "envolviendo" un contexto (el contexto real) y delegando esas funciones a ese contexto.  Un ejemplo es útil: en el ContextWrapper clase, el método abstracto getAssets desde el Context la clase se implementa de la siguiente manera:

@Override
    public AssetManager getAssets() {
        return mBase.getAssets();
    }

mBase es simplemente un campo establecido por el constructor para un contexto específico. Entonces se envuelve un contexto y el ContextWrapper delega su implementación del método getAssets a ese contexto. Volvamos a examinar el Activity clase que finalmente hereda de Context para ver cómo funciona todo esto

Usted probablemente sabe lo que es una Actividad, pero para revisarla, básicamente es 'algo único que el usuario puede hacer. Se encarga de proporcionar una ventana en la que colocar la UI con la que el usuario interactúa '. Los desarrolladores familiarizados con otras API e incluso con los no desarrolladores podrían pensarlo de manera vernácula como una "pantalla". Eso es técnicamente incorrecto, pero no tiene importancia para nuestros propósitos. Entonces, ¿cómo Activity y Context interactuar y qué es exactamente lo que está sucediendo en su relación de herencia?

Nuevamente, es útil mirar ejemplos específicos. Todos sabemos cómo lanzar Actividades. Siempre que tenga "el contexto" desde el que está iniciando la actividad, simplemente llame startActivity(intent), donde Intent describe el contexto desde el que está comenzando una Actividad y la Actividad que le gustaría comenzar. Este es el familiar startActivity(this, SomeOtherActivity.class).

Y lo que es this? this es tu actividad porque el Activity clase hereda de Context. La primicia completa es así: cuando llamas startActivity, en última instancia, el Activity clase ejecuta algo como esto:

Instrumentation.ActivityResult ar =
                mInstrumentation.execStartActivity(
                    this, mMainThread.getApplicationThread(), mToken, this,
                    intent, requestCode);

Entonces utiliza el execStartActivity desde el Instrumentation clase (en realidad de una clase interna en Instrumentation llamado ActivityResult)

En este punto, estamos comenzando a echar un vistazo a las partes internas del sistema.

Aquí es donde OS realmente maneja todo. Entonces, ¿cómo inicia la Instrumentación la Actividad exactamente? Bueno, el param this en el execStartActivity El método anterior es su Actividad, es decir, el Contexto, y el execStartActivity hace uso de este contexto.

Una descripción general de 30,000 es la siguiente: la clase de Instrumentación mantiene un seguimiento de una lista de Actividades que está monitoreando para hacer su trabajo. Esta lista se usa para coordinar todas las actividades y asegurarse de que todo funcione sin problemas al administrar el flujo de actividades.

Hay algunas operaciones que no he examinado completamente en las que se coordinan los problemas de hilo y proceso. En definitiva, el ActivityResult usa una operación nativa ActivityManagerNative.getDefault().startActivity() que usa el Context que pasaste cuando llamaste startActivity. El contexto que pasó se usa para ayudar en la "resolución de intención" si es necesario. La resolución intencionada es el proceso mediante el cual el sistema puede determinar el objetivo de la intención si no se proporciona. (Vea la guía aquí para más detalles).

Y para que Android lo haga, necesita acceder a la información que le proporciona Context. Específicamente, el sistema necesita acceder a un ContentResolver para que pueda "determinar el tipo MIME de los datos del intento". Todo esto acerca de cómo startActivity hace uso del contexto fue un poco complicado y no entiendo completamente las partes internas yo mismo. Mi punto principal fue simplemente ilustrar cómo se debe acceder a los recursos de toda la aplicación para realizar muchas de las operaciones que son esenciales para una aplicación. Context es lo que proporciona acceso a estos recursos.  Un ejemplo más simple podría ser Vistas. Todos sabemos lo que creas una Vista personalizada extendiendo RelativeLayout o algún otro View clase, debe proporcionar un constructor que tome una Context como un argumento Cuando crea una instancia de su Vista personalizada, pasa en el contexto.  ¿Por qué? Porque la Vista debe poder tener acceso a temas, recursos y otros detalles de configuración de Vista. La configuración de vista es en realidad un gran ejemplo. Cada contexto tiene varios parámetros (campos en ContextImplementaciones) que establece el propio sistema operativo para cosas como la dimensión o la densidad de la pantalla. Es fácil ver por qué esta información es importante para configurar vistas, etc.

Una última palabra:  Por alguna razón, las personas nuevas en Android (e incluso las personas que no son tan nuevas) parecen olvidarse por completo de la programación orientada a objetos cuando se trata de Android. Por algún motivo, las personas intentan adaptar su desarrollo de Android a paradigmas preconcebidos o comportamientos aprendidos.

Android tiene su propio paradigma y un cierto patrón que es bastante consistente si deja de lado sus ideas preconcebidas y simplemente lee la documentación y la guía de desarrollo. Mi punto real, sin embargo, mientras que "obtener el contexto correcto" a veces puede ser complicado, las personas se aterran injustificadamente porque se topan con una situación en la que necesitan el contexto y piensan que no lo tienen. Una vez más, Java es un lenguaje orientado a objetos con un diseño de herencia.

Solo "tiene" el contexto dentro de su Actividad porque su actividad hereda de Contexto. No tiene magia (excepto por todas las cosas que el sistema operativo hace por sí solo para establecer varios parámetros y para "configurar" correctamente su contexto). Por lo tanto, dejando de lado los problemas de memoria / rendimiento (por ejemplo, manteniendo referencias al contexto cuando no lo necesita o hacerlo de una manera que tiene consecuencias negativas en la memoria, etc.), el contexto es un objeto como cualquier otro y puede transmitirse como cualquier POJO (Objeto simple de Java). En ocasiones, es posible que necesite hacer cosas inteligentes para recuperar ese contexto, pero cualquier clase regular de Java que se extienda desde otra cosa que no sea Object se puede escribir de forma que tenga acceso al contexto; simplemente exponga un método público que toma un contexto y luego úselo en esa clase según sea necesario. Esto no fue pensado como un tratamiento exhaustivo en el contexto o el interior de Android, pero espero que sea útil para desmitificar el contexto un poco.


255
2018-04-30 13:44



Un contexto es un controlador para el sistema; proporciona servicios como la resolución de recursos, la obtención de acceso a bases de datos y preferencias, y más. El contexto es similar al manejador del entorno en el que se está ejecutando la aplicación. El objeto de actividad hereda el objeto Contexto.

Para obtener más información, busque en Introducción al desarrollo de Android con Android Studio - Tutorial.


100
2017-08-26 06:33



Mientras sigas pensando de todos modos, piensa en grande.

Interfaz con información global sobre un entorno de aplicación. Esta es una clase abstracta cuya implementación es proporcionada por el sistema Android.

Permite el acceso a clases y recursos específicos de la aplicación, así como a llamadas para operaciones a nivel de aplicación, como actividades de inicio, transmisión y recepción de intentos, etc.

Activity diagram


64
2017-12-28 08:05



ANDROID Y CONTEXTO

Si observas las diversas API de Android, podrás Observe que muchos de ellos toman una android.content.Context objeto como un parámetro. También verá que una Actividad o un Servicio se usa generalmente como Contexto. Esto funciona porque ambas clases se extienden desde Contexto.

¿Cuál es el contexto exactamente?

Según la documentación de referencia de Android, es un entidad que representa varios datos del entorno. Proporciona acceso a locales archivos, bases de datos, cargadores de clases asociados al entorno, servicios que incluyen servicios a nivel de sistema, y ​​más. A lo largo de este libro, y en tu día a día día que se codifica con Android, verá que el contexto se transmite con frecuencia. De: libro "Android in Practice".


57
2018-04-28 10:14



Un Android Contexto es un Interfaz que permite el acceso a recursos específicos de la aplicación y clase e información sobre el entorno de la aplicación.

Si tu aplicación de Android era una aplicación web,   tu contexto sería algo   similar a ServletContext (no estoy haciendo una comparación exacta aquí)

Sus actividades y servicios también amplían el contexto para que hereden todos esos métodos para acceder a la información del entorno en el que se ejecuta la aplicación.


36
2017-08-26 06:40



Ejemplo simple para entender context en Android:

Cada jefe tiene un asistente que cuidar, para hacer todas las tareas menos importantes y lentas. Si se necesita un archivo o una taza de café, el asistente está en la carrera. Algunos jefes apenas saben lo que está sucediendo en la oficina, por lo que preguntan a sus asistentes sobre esto también. Trabajan ellos mismos, pero para la mayoría de las cosas necesitan ayuda de sus asistentes.

En este escenario,

Boss - es la aplicación de Android

Asistente - es contexto

Archivos / Taza de café - son recursos

Generalmente llamamos contexto cuando necesitamos obtener información sobre diferentes partes de nuestra aplicación, como actividades, aplicaciones, etc.

Algunas operaciones (cosas donde se necesita ayudante) donde el contexto está involucrado:

Cargando recursos comunes Creando vistas dinámicas Mostrar mensajes de Toast Lanzamiento de actividades, etc. Diferentes formas de obtener contexto:

getContext()

getBaseContext()

getApplicationContext()

this

26
2018-05-02 12:37



Solo ponerlo para novatos;

Entonces, primero entiende el contexto de Word:

En inglés-lib. significa:

"Las circunstancias que forman el escenario para un evento, declaración o   idea, y en términos de los cuales puede ser completamente entendido y evaluado ".

"Las partes de algo escrito o hablado que preceden inmediatamente y   sigue una palabra o pasaje y aclara su significado ".

Ahora tome la misma comprensión para el mundo de la programación:

contexto del estado actual de la aplicación / objeto. Permite que los objetos recién creados comprendan lo que ha estado sucediendo. Normalmente lo llamas para obtener información sobre otra parte de tu programa (actividad, paquete / aplicación)

Puedes obtener el contexto invocando getApplicationContext(), getContext(), getBaseContext() o this (cuando está en la clase de actividad).

Para obtener el contexto en cualquier lugar en la aplicación use el siguiente código:

Crear nueva clase AppContext dentro de tu aplicación de Android

public class AppContext extends Application {

    private static Context context;

    public void onCreate(){
        super.onCreate();
        AppContext.context = getApplicationContext();
    }

    public static Context getAppContext() {
        return AppContext.context;
    }
}

Ahora, cada vez que desee un contexto de aplicación en una clase que no sea de actividad, llame a este método y tendrá contexto de aplicación.

Espero que esto ayude ;)


15
2018-05-09 03:23



  • El contexto representa un identificador para obtener datos del entorno.
  • La clase de contexto en sí misma se declara como abstracta, cuya implementación es proporcionada por el sistema operativo Android.
  • El contexto es como el control remoto de un televisor y los canales en la televisión son recursos, servicios, etc. enter image description here

Qué puedes hacer con eso ?

  • Cargando recurso.
  • Lanzar una nueva actividad.
  • Creando vistas.
  • Obteniendo el servicio del sistema.

Formas de obtener contexto:

  • getApplicationContext()
  • getContext()
  • getBaseContext()enter image description hereenter image description here

15
2018-05-02 10:27