setimageurl - Android Volley ImageLoader-¿Parámetro BitmapLruCache?
networkimageview volley example (5)
Tengo problemas para implementar la memoria caché de imágenes con la nueva biblioteca de Volley. En la presentación, el código se ve así
mRequestQueue = Volley.newRequestQueue(context);
mImageLoader = new ImageLoader(mRequestQueue, new BitmapLruCache());
El BitmapLruCache obviamente no está incluido en el juego de herramientas. ¿Alguna idea de cómo implementarlo o señalarme algunos recursos?
http://www.youtube.com/watch?v=yhv8l9F44qo @ 14: 38
¡Gracias!
Aquí hay un ejemplo del uso de una memoria caché LRU basada en disco con Volley. Se basa en el uso de una versión de DiskLruCache de AOSP mantenida por Jake Wharton. http://blogs.captechconsulting.com/blog/raymond-robinson/google-io-2013-volley-image-cache-tutorial
Editar: he actualizado el proyecto para incluir una memoria caché LRU en memoria como la implementación predeterminada, ya que este es el método recomendado. Volley maneja implícitamente el caché basado en disco en su propio caché L2. La memoria caché de imagen es solo la caché L1. Actualicé la publicación original y agregué algunos detalles más aquí: http://www.thekeyconsultant.com/2013/06/update-volley-image-cache.html .
Ficus proporciona este código de muestra para el LRU de mapa de bits:
Lo que aconsejo es usar un caché de mapa de bits de Singleton para que este caché esté disponible durante toda la vida de su aplicación.
public class BitmapCache implements ImageCache {
private LruCache<String, Bitmap> mMemoryCache;
private static BitmapCache mInstance;
private BitmapCache(Context ctx) {
final int memClass = ((ActivityManager) ctx
.getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass();
// Use 1/16th of the available memory for this memory cache.
final int cacheSize = 1024 * 1024 * memClass / 16;
mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight();
}
};
}
public static BitmapCache getInstance(Context ctx) {
if (mInstance == null) {
mInstance = new BitmapCache(ctx);
}
return mInstance;
}
@Override
public Bitmap getBitmap(String url) {
return mMemoryCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
mMemoryCache.put(url, bitmap);
}
}
esto viene en una nueva API para manejar el OOM
public class BitmapMemCache extends LruCache<string, Bitmap> implements ImageCache {
public BitmapMemCache() {
this((int) (Runtime.getRuntime().maxMemory() / 1024) / 8);
}
public BitmapMemCache(int sizeInKiloBytes) {
super(sizeInKiloBytes);
}
@Override
protected int sizeOf(String key, Bitmap bitmap) {
int size = bitmap.getByteCount() / 1024;
return size;
}
public boolean contains(String key) {
return get(key) != null;
}
public Bitmap getBitmap(String key) {
Bitmap bitmap = get(key);
return bitmap;
}
public void putBitmap(String url, Bitmap bitmap) {
put(url, bitmap);
}
}
import android.graphics.Bitmap;
import android.support.v4.util.LruCache;
public class BitmapLruCache extends LruCache<String, Bitmap> implements ImageCache {
public static int getDefaultLruCacheSize() {
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory / 8;
return cacheSize;
}
public BitmapLruCache() {
this(getDefaultLruCacheSize());
}
public BitmapLruCache(int sizeInKiloBytes) {
super(sizeInKiloBytes);
}
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight() / 1024;
}
@Override
public Bitmap getBitmap(String url) {
return get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
put(url, bitmap);
}
}