2012-05-08 23 views
5

Soy nuevo en android ...confusión sobre Contexto

El tiempo máximo que tengo que enfrenta la clase context que a veces me hace confuso. En algún lugar utiliza context, en algún lugar se llama por getApplicationContext(), getContext(), getBaseContext().

Traté de hacer que lo entendiera desde este sitio, http://www.developer.android.com/, pero era difícil de entender.

Respuesta

2

En Android, un contexto se usa para muchas operaciones, pero principalmente para cargar y acceder a los recursos. Esta es la razón por la cual todos los widgets reciben un parámetro Context en su constructor. En una aplicación regular de Android, generalmente tiene dos tipos de contexto, actividad y aplicación. Por lo general, es el primero que el desarrollador pasa a las clases y métodos que necesitan un contexto:

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

usos típicos de contexto:

  1. crear nuevos objetos: La creación de nuevos puntos de vista, adaptadores, oyentes:

    TextView tv = new TextView (getContext()); Adaptador ListAdapter = new SimpleCursorAdapter (getApplicationContext(), ...);

  2. acceder a recursos comunes estándar: Servicios como LAYOUT_INFLATER_SERVICE, SharedPreferences:.

    context.getSystemService (LAYOUT_INFLATER_SERVICE)
    getApplicationContext() getSharedPreferences (nombre , modo);

  3. Acceso a componentes Implícitamente:.. En cuanto a los proveedores de contenidos, emisiones, la intención

    getApplicationContext() getContentResolver() consulta (URI, ...);

usted tiene que tener cuidado al usar contexto porque maintaning que puede causar a pérdidas de memoria

En resumen, para evitar pérdidas de memoria relacionadas con el contexto, recordar lo siguiente:

  1. Do no mantener referencias de larga duración a una actividad de contexto (una referencia a una actividad debe tener el mismo ciclo de vida que la actividad en sí)
  2. intente utilizar el contexto de la aplicación en lugar de un contexto de la actividad
  3. Evitar las clases internas no estáticos en una actividad si no se controla su ciclo de vida, utilizar una clase interna estática y crea una referencia débil a la actividad adentro. La solución a este problema es utilizar una clase interna estática con un WeakReference a la clase externa, como se ha hecho en ViewRoot y su clase interna W por ejemplo
  4. Un recolector de basura no es un seguro contra pérdidas de memoria
Cuestiones relacionadas