【发布时间】:2013-08-02 05:09:41
【问题描述】:
我在我的项目中使用 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);
}
}
我在 HTC Desire (Android 2.2.2) 上收到 OutOfMemoryException。我该如何处理这个异常?我做错了什么吗?
编辑
我在猴子测试期间遇到的这个异常:
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 异常的解决方案。
【问题讨论】:
-
在清单中尝试 largeHeap="true"
-
这可能是由于位图的大小,请参考此developer.android.com/training/displaying-bitmaps/…了解更多详情
-
@Sipka - 编辑了我的问题。
-
@Ziem 解决了吗?我遇到了同样的问题。请你给出你解决的答案好吗?
-
@GangadharNimbally 不,我没有找到解决方案。我最近切换到:github.com/nostra13/Android-Universal-Image-Loader。
标签: android out-of-memory android-2.2-froyo android-volley