1) Tienes que ser tu propio navegador.
Descargue sus pulgares a la tarjeta SD en lugar de guardarlos en la memoria RAM. Reduzca/gírelos antes de guardarlos para que la próxima vez que los cargue, la carga sea "gratuita" desde la tarjeta SD en lugar de costosa desde los internets. (Es decir: como cualquier navegador, use un caché de archivos local).
Libere cualquier objeto Bitmap provisional que pueda crear para hacer esto.
Aprenda a usar el parámetro "inSampleSize
" para descomprimir Bitmaps a menos que la resolución original.
Si los archivos que escribe finalizan en una extensión de imagen (.jpg, etc.) aparecerán en la Galería, por lo que no guarde sus pulgares con nombres de archivo de imagen obvios.
2) Cree un sistema de caché en niveles (Mapa de bits> Tarjeta SD> Internets).
Al desempacar una miniatura, guárdela en una memoria caché de SoftReference. Si necesita usar esa miniatura, solicítela desde el caché. Si la VM necesita más memoria, su instancia de SoftReference puede devolver nulo.
Si obtiene nulo de su caché de mapa de bits, entonces verifique si ya ha puesto su url en la tarjeta SD y colóquela en el caché de mapa de bits desde allí.
Si obtienes nulo de tu sistema de archivos, entonces ve a descargar la imagen de internet y guárdala en tu tarjeta SD y pégala en tu caché de mapa de bits.
3) Liberar recursos que no se están utilizando.
De la misma manera, asegúrese de borrar los mapas de bits de las vistas en las que se han colocado tan pronto como la vista esté fuera de pantalla (si sus vistas viven en un ListView u otro elemento adaptado, esto es esencialmente "gratuito"). "desde el reciclaje de los elementos de la Vista) - Sin embargo, si tiene ImageViews instanciado con mapas de bits y no se muestran inmediatamente en la pantalla, probablemente esté desperdiciando mucho.
Puede simplemente llamar al setImageBitmap(null);
en una ImageView y la referencia al mapa de bits se eliminará (de modo que si la única referencia es SoftReference cuando no se está utilizando).
4) Presta atención a lo hilo que se encuentra.
Recuerde, usted necesidad mapas de bits de descarga de un hilo no la interfaz de usuario (usamos una instancia de servicio para actuar como una cola de solicitudes intención), y debe adjuntar mapas de bits para ver la instancia solo en el hilo de la interfaz de usuario.
Tendrá que crear un buen sistema en cola para cargar todo en su caché de mapa de bits fuera del subproceso de interfaz de usuario y luego utilizar un controlador para indicarle a su caché de mapa de bits que rellene ImageViews en el hilo de la interfaz de usuario.
5) Preste atención a sus Colas de descarga.
Si usted es como nosotros y tiene dos pulgares y imágenes a tamaño completo, necesita utilizar ya sea manualmente una cola de prioridad para poner sus peticiones imagen antes de peticiones pulgar, o utilizar dos servicios diferentes (que enqueue sus Intents separados) para descargar pulgares versus imágenes completas.
De lo contrario, puede poner en cola una pantalla llena de descargas pero no responder con una imagen completa hasta que se completen todos los pulgares.
6) Pregunte al sistema cuánta RAM tiene.
Debug.MemoryInfo memoryInfo = new Debug.MemoryInfo();
Debug.getMemoryInfo(memoryInfo);
7) "onLowMemory()
" no hace lo que esperas.
Es para cuando el usuario está ejecutando demasiadas aplicaciones en el teléfono y el sistema operativo necesita recuperar la memoria física de todas las aplicaciones en ejecución.
Esto está totalmente separado de quedarse sin montón de VM de aplicaciones como lo hará fácilmente al cargar demasiados mapas de bits.
A mi leal saber y entender, no recibirá una advertencia, simplemente se bloqueará (aunque puede seguir la información de la memoria con la llamada anterior).
Espero que ayude a tratar de hacer algo inteligente acerca de la descarga y visualización de los pulgares de las redes.
mig
Elaboraré un poco más. Para no descargar cada imagen varias veces, almaceno las imágenes descargadas en la actividad y reemplazo las imágenes viejas - LRU. Me gustaría saber cuándo detener el almacenamiento en caché o vincular el tamaño del LRU. –
Tengo el mismo problema, probé las referencias de software y lo que sea ... –