getcontext - getbasecontext android
Android: Referencias a un contexto y fugas de memoria. (2)
El alcance de HelperClass solo está dentro de su función onCreate, por lo que una vez que se ejecuta onCreate, su objeto "h" ya no es necesario y está sujeto a la recolección de basura.
Sería una historia diferente si "h" fuera un miembro estático, esa sería una gran manera de perder memoria.
He leído que es un error y una fuente de pérdidas de memoria en la aplicación de Android para mantener las referencias duraderas a un Contexto.
Pero no entiendo si está bien crear una clase que se vea así:
public class HelperClass {
private Context context;
public HelperClass(Context context) {
this.context = context;
}
public void myHelperMethod() {
// uses this.context
}
}
Y llámalo desde una Actividad:
public class MyActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
HelperClass h = new HelperClass(this);
h.myHelperMethod();
}
...
}
Esto está bien y no causará una pérdida de memoria.
Tan pronto como onCreate
termine de ejecutarse, h
estará fuera del alcance y será elegible para la recolección de basura. Si h
fuera estático, entonces tendrías problemas. Solo cuando la referencia al contexto sobreviva al ciclo de vida del propio contexto se producirá una pérdida de memoria. Algunos consejos útiles:
- Utilice
Context.getApplicationContext()
cuando sea posible. Este contexto vivirá mientras su aplicación esté viva. - Tenga cuidado al usar campos estáticos y clases internas.
- Ejecute su aplicación a través de un generador de perfiles para comprobar si hay fugas.