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>)?

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

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.

  • Android - Enmascarar un mapa de bits con otro mapa de bits
  • BadTokenException: No se puede agregar la ventana
  • Anular los temas predeterminados de Android
  • Los complementos no funcionan en Eclipse en Windows 7 64 bits
  • Conexión HTTPS con certificado de cliente en una aplicación para Android
  • JSONObject no serializable?
  • Compruebe la conexión de red y de Internet - Android
  • El paquete no existe cuando se utiliza una aplicación independiente como dependencia
  • Dibujo sobre lienzo con pintura en mejor resolución? (Androide)
  • Android: Programe el modo de selección de texto en un WebView en Jelly Bean
  • ¿Hay algún sitio web que muestre todos los componentes y widgets de interfaz de usuario disponibles con código fuente?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.