Almacenamiento en caché de imágenes SVG en Android y uso de memoria

Estoy utilizando SVG Android ( http://code.google.com/p/svg-android/ ). Estoy usando el mismo archivo svg en varias actividades de mi aplicación. ¿Es una buena idea construir un caché para almacenar y recuperar imágenes?

Estoy usando un SparseArray para almacenar PictureDrawable (generado de SVG) de esta manera:

SVG svg = SVGParser.getSVGFromResource(resources, resourceId); PictureDrawable pictureDrawable = svg.createPictureDrawable(); cache.put(resourceId, pictureDrawable); 

¿Tengo que prestar atención al uso de memoria al administrar objetos de PictureDrawable? Confirmo que los artículos máximos en el escondrijo serían menos de 50.

Sí, es una idea muy buena, sólo en la primera ejecución, la aplicación generará imágenes para ese tamaño de pantalla de dispositivo particular de svg, y almacenarlos en caché, y utilizarlos todo el tiempo después de eso. Ahorra una gran cantidad de CPU, carga de interfaz de usuario más rápida.

Sin embargo, recomiendo guardar archivos de caché con nombres que contengan la versión de su aplicación. Si publica una actualización (digamos la versión 2) con algunas imágenes svg diferentes, se utilizarán nuevos archivos con nombres diferentes en lugar de archivos antiguos.

Su Normalmente Ok para usar hasta 10Mb en Context.getCacheDir() , el sistema limpia esta carpeta cuando es baja en almacenamiento.

Además, como una buena medida, cada vez que inicializar la clase de Cache , podría hacer un poco de limpieza, es decir, eliminar alguna versión antigua o no requiere elementos.

Aquí hay una clase que utilizo principalmente para guardar y obtener un objeto Serializable, desde el directorio de caché de la aplicación:

 public class ObjectCacheFile<T> { private final File mFile; public ObjectCacheFile(Context context, String name) { mFile = new File(context.getCacheDir(), name); } public File getFile() { return mFile; } public void put(T o) { try { if (!mFile.exists()) { mFile.createNewFile(); } FileOutputStream fos = new FileOutputStream(mFile); ObjectOutputStream objOut = new ObjectOutputStream(fos); try { objOut.writeObject(o); } finally { objOut.close(); } } catch (IOException e) { Log.e(App.getLogTag(this), "error saving cache file", e); } } @SuppressWarnings("unchecked") public T get() { if (!mFile.exists()) { return null; } try { ObjectInputStream objIn = new ObjectInputStream(new FileInputStream(mFile)); try { return (T) objIn.readObject(); } finally { objIn.close(); } } catch (IOException e) { Log.e(App.getLogTag(this), "error reading cache file", e); } catch (ClassNotFoundException e1) { Log.e(App.getLogTag(this), "cache file corrupted, deleting", e1); mFile.delete(); } return null; } } 
  • Marcador de Google Maps para Android: Released unknown imageData reference
  • Rellene lentamente la imagen SVG con color (como barra de progreso) en android
  • Área de selección de imagen táctil
  • La animación SVG no funciona en Android WebView
  • Cómo crear dibujos vectoriales para Android?
  • Android: El uso de SVG en res lleva al error: "El nombre del archivo debe finalizar con .xml o .png"
  • Error al intentar probar AnimatedVectorDrawable, "No se puede cambiar de x a z"
  • SVG en el navegador de Android
  • ¿Cómo tono este PictureDrawable?
  • Mapa de imagen de Android. - mostrar un archivo .svg y usarlo como un mapa de imágenes (zonas de toque)
  • Visualización de archivos SVG en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.