5

Estaba estudiando este artículo, Avoid Memory Leaks. Hay algunas sugerencias para evitar pérdidas de memoria, una de ellas es a continuación:¿Cómo la clase interna estática con una WeakReference a la clase externa puede evitar pérdidas de memoria de Android? Necesito un ejemplo

Evitar las clases internas no estáticos en una actividad si no se controla su ciclo de vida, el uso de una clase interna estática y hacer una débil referencia a la actividad dentro. La solución a este problema es utilizar un clase interna estática con una WeakReference a la clase externa, como se hace en ViewRoot y su clase interna W por ejemplo

1- Puede alguien elaborar este dando un ejemplo ?

2- ¿Cómo usar las clases internas estáticas con referencia Débil a las clases internas?

3- ¿Cuáles son las mejores prácticas para usar esa clase estática en su aplicación para evitar fugas de memoria.

Gracias.

+0

has visto esto: http://stackoverflow.com/questions/5002350/android-weak-reference-of-inner-class? – davogotland

+0

Gracias. sí lo he visto, pero aún necesito un ejemplo simple con explicación. –

Respuesta

1

En este post, una respuesta muestra un ejemplo sencillo de lo que busca: How to instantiate interface in fragment?

PERO, un problema es que a veces un fragmento vive más tiempo que su actividad, por ejemplo, si la actividad tiene una cambio de configuración (por ejemplo, rotado), entonces la Actividad se destruye, pero el Fragmento se puede mantener vivo y luego volver a unir a la Actividad nueva (girada). Ver esta publicación: Android Fragment lifecycle over orientation changes

Puede que tengas un problema con la solución propuesta al usar WeakReference, porque después de una rotación tendrías una referencia a la actividad anterior (o tal vez nada).

Lo que parece funcionar para mí:

1) Cuando necesito una referencia a la actividad, llamar getActivity(). Puede hacerlo bien en onPostExecute() de una clase AsyncTask miembro, por ejemplo.

2) Compruebe el resultado de nula (esto puede suceder: Los fragmentos pueden vivir más que sus actividades)

3) Comprobar si la actividad isFinishing() - que no quieren hacer ciertas cosas de interfaz de usuario en ese estado .

4) Emitir actividad a su tipo de interfaz.

5) Call callback in interface type.

Cuestiones relacionadas