¿Cómo liberar la memoria del objeto Activity real después de dejar la actividad?
Estoy recibiendo un OutofMemoryError para mi aplicación Android, y estoy un poco confundido en cuanto a lo que está pasando. Básicamente lo que pasa es, puedo ejecutarlo las primeras veces, pero cuando trato de salir de él y luego abrir de nuevo de forma rápida y repetitiva, me sale un error de memoria.
He intentado investigar este tema, y he encontrado que el método recycle () ha sido comúnmente el problema. Sin embargo, he llamado el método de reciclado en cada uno de los mapas de bits (que se almacenan en un contenedor de objetos, almacenados en un arraylist), pero todavía estaba recibiendo el problema.
- ¿Hay de todos modos una aplicación puede utilizar más de 16mb en la memoria?
- Descargar Doc / PDF desde Internet y guardar en la memoria interna
- Fugas de contexto de Android en AsyncTask
- ¿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: descarga el archivo desde Internet mediante DownloadManager y guárdelo en la memoria interna
Después de hacer esto, traté de usar el analizador de memoria Eclipse para mirar los vertederos de montón, cuando me encontré con algo extraño. Después de abandonar la actividad (volver a la actividad del lanzador, y luego abrir la actividad de nuevo a través de un botón, tomé capturas de pantalla del volcado de montón con el analizador de memoria. Actividad, se estaba creando otra instancia del objeto de actividad, y los antiguos no estaban siendo liberados, aunque se estaba llamando el método onDestroy () que también tenía el código de reciclado / limpieza.
A continuación, intentó reemplazar el método finalize para ver si se estaba llamando cuando la actividad salir de nuevo en la actividad de lanzador, pero no se estaba llamando. He leído en otros hilos de stackoverflow que finalize () no siempre se llama, por lo que al final, todavía no estoy seguro de lo que está pasando.
En última instancia, mi pregunta es la siguiente: ¿Cómo se supone que debo asegurar que el objeto Actividad (el objeto de actividad en sí, no el material creado de la actividad) se suelte después de abandonar la actividad en otra actividad?
- ¿Este patrón de mensajería de Servicio de Actividad causa una pérdida de memoria?
- Android: cómo manejar el almacenamiento de archivos en la memoria baja del dispositivo (memoria interna / externa)
- Los archivos masivos de hprof que se crean de alguna manera, me impide empujar
- ¿Cómo averiguar el uso de memoria de la aplicación en ejecución actual en android?
- Cuando se reemplaza un fragmento y se coloca en la pila de atrás (o se quita) ¿permanece en la memoria?
- Cambiar la actividad a AppCompatActivity utiliza más memoria RAM?
- Android GLSurfaceView provoca fugas?
- Cómo encontrar fugas de memoria del código nativo en android
Suena como su aplicación sufre de pérdidas de memoria, te recomiendo que sigas los siguientes enlaces:
Cómo evitar fugas de memoria
Gestión de memoria para aplicaciones de Android
Una opción es establecer el modo de inicio en singleInstance o singleTask en el archivo de manifiesto. Esto asegurará que no se crea otra instancia de la actividad.
Ejemplo de documentación
Una forma de liberar su objeto de actividad es llamarlo método onDestoy (). Tome un objeto de su actividad que lo haga público estático y haga que sea nulo en onDestroy ()
Public static Your_activity obj;
Y luego en onCreate método initalize obj por esto
obj=this;
Y en onDestroy () método hacer esto:
obj= null;
- El desplazamiento de grandes listas de adaptadores basados en Cursor es más rápido que las listas mucho más pequeñas de adaptadores en memoria
- Reaccionar nativo: cómo obtener el tamaño del archivo, el tipo mime y la extensión?