android - juego - Fuga de memoria en el detector de eventos.
memory leak java (1)
¿Puede esa clase interna también causar pérdida de memoria?
Posiblemente. Depende de lo que esos oyentes están registrados.
Por ejemplo, un OnClickListener
bien escrito para un Button
no debe dar lugar a una pérdida de memoria, ya que aunque el OnClickListener
puede ser una clase interna y tener una referencia implícita a la Activity
, todo el conjunto de objetos está vinculado a la actividad. . Por lo tanto, cuando la actividad se destruye, la actividad, el Button
y OnClickListener
pueden recolectarse como basura en su totalidad.
Sin embargo, el proceso mantiene un LocationListener
, registrado con el servicio del sistema LocationManager
. Por lo tanto, incluso si la actividad se destruye, el oyente permanecerá registrado. Si ese oyente es una clase interna, continuará manteniendo una referencia implícita a la actividad y tendrá una pérdida de memoria.
¿Debería esa clase interna ser estaica?
Posiblemente. En la mayoría de los casos, la respuesta correcta es "si está registrando un oyente que no sea con la interfaz de usuario, asegúrese de anular el registro en un punto apropiado". En ese caso, no habrá fugas.
¿Puede alguien darme un código de ejemplo de cómo el detector de eventos puede usar a prueba de fugas?
No en lo abstracto, no.
He revisado el artículo http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html . En este artículo se sugiere utilizar una clase interna estática con una WeakReference. Muchas clases internas se utilizan para los oyentes de eventos. ¿Puede esa clase interna también causar pérdidas de memoria? ¿Debería esa clase interna ser estática?