From bba178394e160c514430b7170d2b46e6b6f72879 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 3 Dec 2012 12:20:05 +0300 Subject: try several downsampling sizes if OOM detected --- src/org/fox/ttcomics/ComicFragment.java | 38 ++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/org/fox/ttcomics/ComicFragment.java b/src/org/fox/ttcomics/ComicFragment.java index 4c5ce9c..7b324dc 100644 --- a/src/org/fox/ttcomics/ComicFragment.java +++ b/src/org/fox/ttcomics/ComicFragment.java @@ -44,21 +44,33 @@ public class ComicFragment extends Fragment implements GestureDetector.OnDoubleT final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeStream(archive.getItem(page), null, options); - - if (CommonActivity.isCompatMode()) { - options.inSampleSize = CommonActivity.calculateInSampleSize(options, 512, 512); - } else { - options.inSampleSize = CommonActivity.calculateInSampleSize(options, 1024, 1024); - } - options.inJustDecodeBounds = false; + + Bitmap bitmap = null; - return BitmapFactory.decodeStream(archive.getItem(page), null, options); - } catch (OutOfMemoryError e) { - if (activity != null) { - activity.toast(R.string.error_out_of_memory); - } - e.printStackTrace(); + try { + options.inSampleSize = CommonActivity.calculateInSampleSize(options, 1024, 1024); + bitmap = BitmapFactory.decodeStream(archive.getItem(page), null, options); + return bitmap; + } catch (OutOfMemoryError e) { + try { + options.inSampleSize = CommonActivity.calculateInSampleSize(options, 768, 768); + bitmap = BitmapFactory.decodeStream(archive.getItem(page), null, options); + return bitmap; + } catch (OutOfMemoryError e1) { + try { + options.inSampleSize = CommonActivity.calculateInSampleSize(options, 512, 512); + bitmap = BitmapFactory.decodeStream(archive.getItem(page), null, options); + return bitmap; + } catch (OutOfMemoryError e3) { + e3.printStackTrace(); + + if (activity != null) { + activity.toast(R.string.error_out_of_memory); + } + } + } + } } catch (IOException e) { e.printStackTrace(); } -- cgit v1.2.3