Memoria caché android> Almacenamiento interno vs caché de objetos
Necesito almacenar en caché las imágenes (solamente 5 o hasta 100) de la tela y exhibido en un listview. Si el usuario selecciona una fila del listview, se puede borrar el caché. He echado un vistazo a algunos ejemplos. Algunos utilizan almacenamiento externo. Algunos utilizan internos y externos. Algunos objetos
Así que cuáles son las ventajas / desventajas del almacenamiento interno ( http://developer.android.com/guide/topics/data/data-storage.html#filesInternal vía getCacheDir ()) y caché de objetos (algo así como WeakHashMap o HashMap <String , SoftReference <Drawable>)?
- Android: nada coincide con el archivo de superposición - durante la construcción de hormigas
- Cómo manejar la falla de AsyncTask
- Obtener la altura de la pantalla en Android
- Introducción al desarrollo de Android
- Cómo enviar texto a través de formularios mediante JSoup
Un problema con softreferences parece ser que pueden obtener gc'ed demasiado rápido ( SoftReference obtiene la basura recogida demasiado pronto ). ¿Qué pasa con el almacenamiento interno de Android? La referencia de sais "Estos archivos serán los que se eliminan primero cuando el dispositivo se ejecuta bajo en el almacenamiento.
¿Tiene alguna diferencia utilizar una caché de objetos o el almacenamiento interno temporal? Excepto para el caché de objetos debe ser un poco más rápido
- ¿Cuáles son las clases comunes de la plataforma en Kotlin?
- Android para bucle
- Mostrar siempre el título del marcador de mapa en Android
- Cómo crear objeto JSON utilizando cadena?
- Cómo agregar eventos de calendario al calendario predeterminado, en silencio sin intención, en android 4?
- Nuevo mapa de bits modificado en la copia que utiliza el búfer
- Android reciclerview no muestra elementos
- Configuración de las reglas proguard en android, sólo puede cifrar el código?
Aquí están las pocas diferencias entre los dos:
- La caché de objetos es más rápida que el almacenamiento interno, pero tiene una capacidad inferior.
- El caché de objetos es de naturaleza transitoria mientras que el almacenamiento interno tiene una vida útil más larga
- El caché de objetos toma el espacio real en el montón. El almacenamiento interno no. Este es un punto importante, como hacer que su caché de objetos demasiado grande podría causar la OutOfMemoryException incluso con SoftReference
Ahora, dadas esas diferencias, no son totalmente mutuamente excluyentes. Mucho de lo que hemos implementado es el uso de almacenamiento en caché de varias capas especialmente relacionado con la carga de la imagen. Estos son los pasos que utilizamos:
- Si la imagen no se ha almacenado en caché, busque la dirección URL y colóquela en caché de primer nivel, que es SoftReference / WeakHashMap o incluso caché duro con tamaño limitado, utilizando LinkedHashMap
- Entonces implementamos removeEldestEntry () en LinkedHashMap. Al golpear la capacidad de caché duro, nos trasladamos las cosas a caché secundaria que es el almacenamiento interno. Usando este método, usted no tiene que refetch la imagen de la URL + sigue siendo más rápido y libera su memoria
- Hicimos una limpieza en base oportuna en el fondo para el almacenamiento interno utilizando el algoritmo LRU. Usted no debe confiar en Android para limpiar esto para usted.
Hemos hecho que las capas múltiples almacenen en caché un componente común y lo hemos utilizado muchos de nuestros proyectos para nuestros clientes. Esta técnica es más o menos seguir a lo que L1, caché L2 en Arquitectura de la computadora.
Usted debe buscar la pregunta "¿Cómo puedo perezoso descargar imágenes en ListView" y relacionados.
- Cómo añadir una vista de desplazamiento al diseño de Android
- Cómo definir el nombre de la carpeta para varias resoluciones de pantalla (conflicto entre Nexus 10 y Galaxy Tab 10)?