leak juego android memory-leaks static inner-classes event-listener

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?