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 usan para los oyentes de eventos. ¿Pueden esas clases internas también causar pérdidas de memoria? ¿Debería esa clase interna ser estática?Fuga de memoria en el detector de eventos
Respuesta
¿Pueden esas clases internas también causar pérdidas de memoria?
Posiblemente. Depende de en qué estén registrados esos oyentes.
Por ejemplo, un bien escrito OnClickListener
para un Button
no debe dar lugar a una pérdida de memoria, porque a pesar de la OnClickListener
puede haber una clase interna y tienen una referencia implícita a la Activity
, todo el conjunto de objetos están a sólo vinculado a la actividad. Por lo tanto, cuando se destruye la actividad, la actividad, Button
y OnClickListener
, se puede recoger como basura en su totalidad.
Sin embargo, un LocationListener
, registrado con el servicio de sistema LocationManager
, se mantiene en el proceso. 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 Staic one?
Posiblemente. En la mayoría de los casos, la respuesta correcta es "si está registrando un oyente que no sea con la IU, asegúrese de anular el registro en un punto apropiado". En ese caso, no habrá fugas.
¿Puede alguien darme algún código de ejemplo de cómo el oyente de eventos puede usar a prueba de fugas?
No en el resumen, no.
- 1. Detector de perfil/detección de fuga VS2010
- 2. Symfony2 detector de eventos
- 3. detección de fuga de memoria en C++ con/sin Visual Leak Detector
- 4. JavaScript: eliminar detector de eventos
- 5. Fuga de memoria IE9
- 6. Fuga de memoria en el teclado descartar
- 7. Fuga de memoria en C++
- 8. ¿Una fuga de memoria de la aplicación causa una fuga de memoria en el sistema operativo?
- 9. Fuga de memoria en Swing
- 10. Enviar datos con un detector de eventos
- 11. Fuga de memoria de suplantación
- 12. Fuga de memoria con ContextMenuStrip
- 13. Fuga de memoria para CComBSTR
- 14. Javascript rendimiento del detector de eventos
- 15. Fuga de memoria no administrada
- 16. manera correcta para evitar pérdidas de memoria en DOM detector de eventos
- 17. Fuga de memoria en Font Glyph/UIWebView
- 18. Fuga de memoria en .Net Speech.Synthesizer?
- 19. .NET RegEx "fuga de memoria" investigación
- 20. Fuga de memoria en JavaScript (Chrome)
- 21. Fuga de memoria durante el uso de emoticones en CRichEditCtrl
- 22. jQuery vincular el detector de eventos antes que otro
- 23. Fuga de memoria en WCF (dúplex) en el servidor
- 24. Android: RadioGroup - Como configurar el detector de eventos
- 25. Herramientas de detección de fuga de memoria
- 26. ¿Cómo eliminar detector de eventos en la extensión de Chrome
- 27. ¿Cuál es la diferencia, si existe, entre el controlador de eventos y el detector de eventos?
- 28. rabbitmq + fuga de memoria de apio?
- 29. La mejor definición de fuga de memoria
- 30. agregando un detector de eventos personalizado en as3
Aquí hay un simple oyente que causa pérdida de memoria http://stackoverflow.com/questions/7083441/android-alertdialog-causes-a-memory-leak – user4o01
¿Cómo puedo saber si el oyente está vinculado a la actividad o retenido? por el proceso? – Jaskey
@CommonsWare gracias de nuevo Sir Murphy. –