Jak radzić sobie z wyjątkiem OutOfMemory Exception
Używam biblioteki Volley w moim projekcie, ale mam problem z OutOfMemory Exception. W mojej aplikacji pobieram kciuki i pełnowymiarowe obrazy z serwera za pomocą NetworkImageViewsetImageUrl
metoda. Używam 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);
}
}
OtrzymujęOutOfMemoryException
w HTC Desire (Android 2.2.2). Jak mogę poradzić sobie z tym wyjątkiem? Czy coś nie tak robię?
Edytować
Ten wyjątek dostałem podczas testu małpy:
java.lang.OutOfMemoryError na com.android.volley.toolbox.ByteArrayPool.getBuf (ByteArrayPool.java:101) na com.android.volley.toolbox.PoolingByteArrayOutputStream.expand (PoolingByteArrayOutputStream.java:76) na com.android.volley. toolbox.PoolingByteArrayOutputStream.write (PoolingByteArrayOutputStream.java:84) w com.android.volley.toolbox.BasicNetwork.entityToBytes (BasicNetwork.java:213) w com.android.volley.toolbox.BasicNetwork.performRequest (BasicNetwork.java:104) w com.android.volley.NetworkDispatcher.run (NetworkDispatcher.java:105)
@Sipka - nie rozwiązuje mojego problemu
@Muhammad Babar - biblioteka Volley obsługuje wszystkie operacje sieciowe / bitmapowe / pamięci podręcznej, więc potrzebuję rozwiązania, aby naprawić wyjątek OutOfMemory spowodowany przez Volley.