我在我的项目中使用 Volley 库,但我遇到了 OutOfMemory 异常的问题。在我的应用程序中,我使用setImageUrl
方法通过 NetworkImageView 从服务器下载拇指和全尺寸图像。我正在使用 BitmapLruCache:
public class BitmapLruCache extends LruCache<String, Bitmap> implements ImageLoader.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);
}
}
我正在OutOfMemoryException
使用 HTC Desire (Android 2.2.2)。我该如何处理这个异常?我做错了什么吗?
编辑
我在猴子测试期间遇到的这个异常:
java.lang.OutOfMemoryError 在 com.android.volley.toolbox.ByteArrayPool.getBuf(ByteArrayPool.java:101) 在 com.android.volley.toolbox.PoolingByteArrayOutputStream.expand(PoolingByteArrayOutputStream.java:76) 在 com.android.volley。 toolbox.PoolingByteArrayOutputStream.write(PoolingByteArrayOutputStream.java:84) 在 com.android.volley.toolbox.BasicNetwork.entityToBytes(BasicNetwork.java:213) 在 com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:104)在 com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:105)
@Sipka - 它不能解决我的问题
@Muhammad Babar - Volley 库处理所有网络/位图/缓存操作,所以我需要解决由 Volley 引起的 OutOfMemory 异常的解决方案。