He leído que es un error y una fuente de pérdidas de memoria en la aplicación de Android para mantener una larga vida de referencias a un Contexto.

Pero no entiendo si es correcto para crear una clase que se parece a este:

public class HelperClass {
    private Context context;

    public HelperClass(Context context) {
        this.context = context;
    }
    public void myHelperMethod() {
        //uses this.context
    }
}

Y llamar a partir de una Actividad:

public class MyActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        HelperClass h = new HelperClass(this);
        h.myHelperMethod();
    }

    ...
}
InformationsquelleAutor Guido | 2010-07-27

2 Comentarios

  1. 45

    Esto está muy bien, y no va a causar una pérdida de memoria.

    Tan pronto como onCreate termina de ejecutarse, h estará fuera de alcance y ser elegible para la recolección de basura. Si h era estático, entonces se puede ejecutar en problemas. Sólo cuando la referencia al contexto deja de ser el ciclo de vida del contexto en sí será una pérdida de memoria se producen. Algunos consejos útiles:

    • Uso Context.getApplicationContext() cuando sea posible. Este contexto va a vivir tanto como su aplicación está vivo.
    • Ser cuidadoso al utilizar los campos estáticos y las clases internas.
    • Ejecutar la aplicación a través de un analizador de para comprobar que no haya fugas.
    • Lo que si tiene una variable privada con una clase auxiliar en su actividad, que tiene un Context de referencia?
    • si la variable es la celebración de instancia Contexto de getApplicationContext(), no hay problema. Pero si usted está sosteniendo el Contexto de una Actividad, tener cuidado con las fugas de memoria (más propiamente, la celebración de la instancia de Actividades más de lo necesario). Tal vez debería usar una WeakReference para mantener la Actividad de la instancia de contexto y el uso de un detector para saber cuando su aplicación ha cambiado a otra actividad.
  2. 7

    El ámbito de la HelperClass es sólo dentro de su función onCreate, así que una vez onCreate ejecutado, su «h» objeto ya no es necesario y sujeto a la recolección de basura.

    Sería una historia diferente si «h» fue un miembro estático – QUE sería una gran forma de pérdida de memoria.

Dejar respuesta

Please enter your comment!
Please enter your name here