致命异常:Thread-18 java.lang.OutOfMemoryError:在android volley中使用较低版本的设备

时间:2014-03-11 06:59:02

标签: android out-of-memory android-volley

我经常在较低版本的Android设备中使用排球库进行OOM。

我正在使用BitmapLruCache

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);
}

}

您的建议将不胜感激。谢谢。

03-11 12:24:02.768: E/AndroidRuntime(18454): FATAL EXCEPTION: Thread-18
03-11 12:24:02.768: E/AndroidRuntime(18454): java.lang.OutOfMemoryError: (Heap Size=19463KB, Allocated=14480KB, Bitmap Size=10107KB)
03-11 12:24:02.768: E/AndroidRuntime(18454):    at com.android.volley.toolbox.ByteArrayPool.getBuf(ByteArrayPool.java:101)
03-11 12:24:02.768: E/AndroidRuntime(18454):    at com.android.volley.toolbox.PoolingByteArrayOutputStream.<init>(PoolingByteArrayOutputStream.java:53)
03-11 12:24:02.768: E/AndroidRuntime(18454):    at com.android.volley.toolbox.BasicNetwork.entityToBytes(BasicNetwork.java:203)
03-11 12:24:02.768: E/AndroidRuntime(18454):    at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:104)
03-11 12:24:02.768: E/AndroidRuntime(18454):    at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:105)

2 个答案:

答案 0 :(得分:3)

适用于低内存设备 -

LRU位图缓存为低内存设备占用太多内存。

检查说明 - bug 50733: Fix OOM error on low-memory devices

答案 1 :(得分:2)

当我尝试下载10个大小为2 MB的图像时,它出现了Out Of Memory异常。

由于凌空本身说它无法下载或上传大量数据。

在这里,我通过在服务器中根据需要将图像重新调整为较小的大小来修复OOM。

示例:实际上我需要尺寸为400x200的图像,但服务器尺寸为1500x1600,因此我在服务器中制作了尺寸为400x200的图像,我的列表视图很容易从服务器下载图像。