DialogFragment pérdida de memoria
En la aplicación en la que estoy trabajando, estoy viendo una pérdida de memoria en un DialogFragment y la única manera de solucionarlo hasta ahora ha sido eliminar todas las vistas cuando el DialogFragment se destruye, ¿es normal hacerlo? Estoy trabajando con una ROM personalizada, así que no estaba seguro si tal vez eso tiene algo que ver con este problema. ¿Hay alguna razón de no eliminar todas las vistas desde el diálogo podría hacer que se fugas de memoria?
@Override public void onDestroyView() { if (getView() instanceof ViewGroup) { ((ViewGroup)getView()).removeAllViews(); } super.onDestroyView(); }
- ¿Cómo utilizar Valgrind con la aplicación android en Eclipse en Ubuntu para encontrar fugas de memoria de código nativo android en tiempo de ejecución?
- Android con poca memoria, por ninguna razón obvia
- Tamaño del mapa de bits devuelto por la cámara a través de la intención?
- Público o privado, realmente importa con las variables de Android
- Fuga de memoria durante el uso de anuncios intersticiales de Admob
- No existe el directorio de caché
- Android BitmapRegionDecoder Fuga de memoria
- Límite de tamaño de Android montón, todavía tenemos necesidad de diseñar aplicaciones con un límite de 16 MB en mente?
- ¿Cómo averiguar la huella de memoria de mi aplicación para Android?
- Lenta Cargando imágenes grandes con Picasso
- Problemas de memoria - fragmentos
- Se pierden las bases de datos de SQLiteConnection al ejecutar el emulador
- InputMethodManager contiene referencia al tabhost - Memory Leak - OOM Error
Esto sucede a mi aplicación también y encontré la fuga usando Leakcanary.
Sucede cuando tienes un diálogo con EditText. El parpadeo del cursor, que se implementa mediante una devolución de llamada, no se maneja correctamente cuando se cierra la vista que contiene el EditText. Y sucede por casualidad según esto.
https://code.google.com/p/android/issues/detail?id=188551
Editar
Y así es como lo hago antes de cada dialog.dismiss()
:
editText.setCursorVisible(false); dismiss();
¡Espero que esto ayude!
MemoryLeak
puede ocurrir para muchas causas, algunas causas comunes:
- Mantenga la referencia de su objeto (en este caso la instancia de su DialogFragment) en algunos campos estáticos .
- Pasar
Context
a Thread o AsyncTask porque Threads también es raíz de GC ! - Su clase tiene clase interna no estática, en este caso ocurre una pérdida de memoria si la clase interna está relacionada con la raíz de la GC (por ejemplo, si la clase interna es instancia de
AsyncTask
).
En tu caso tal vez tengas una vista relacionada con la raíz de la GC, mientras que esa vista no puede ser recolectada de basura tu diálogo que mantiene las vistas también no se puede recolectar basura.