private Bitmap decodeWithOOMHandling(URI imageUri) throws IOException { Bitmap result = null; ImageDecoder decoder = new ImageDecoder(imageUri, downloader, options); decoder.setLoggingEnabled(loggingEnabled); for (int attempt = 1; attempt <= ATTEMPT_COUNT_TO_DECODE_BITMAP; attempt++) { try { ViewScaleType viewScaleType = ViewScaleType.fromImageView(imageView); result = decoder.decode(targetSize, options.getImageScaleType(), viewScaleType); } catch (OutOfMemoryError e) { L.e(e); switch (attempt) { case 1: System.gc(); break; case 2: configuration.memoryCache.clear(); System.gc(); break; case 3: throw e; } // Wait some time while GC is working SystemClock.sleep(attempt * 1000); continue; } break; } return result; }
private Bitmap decodeImage(URI imageUri) throws IOException { Bitmap bmp = null; if (configuration.handleOutOfMemory) { bmp = decodeWithOOMHandling(imageUri); } else { ImageDecoder decoder = new ImageDecoder(imageUri, downloader, options); decoder.setLoggingEnabled(loggingEnabled); ViewScaleType viewScaleType = ViewScaleType.fromImageView(imageView); bmp = decoder.decode(targetSize, options.getImageScaleType(), viewScaleType); } return bmp; }