diff options
author | Uday Kiran jandhyala <ukiran@codeaurora.org> | 2014-05-21 18:03:12 +0530 |
---|---|---|
committer | emancebo <emancebo@cyngn.com> | 2014-09-04 10:40:21 -0700 |
commit | f5d86db5891316b713174b179759f1f749dcca14 (patch) | |
tree | 6f55c5fabab1f46c8f87b07c2e265246d7583af9 | |
parent | 4f8d14a26ee1f1945149ac9a7051eb22d28751ae (diff) | |
download | android_packages_apps_Gallery2-f5d86db5891316b713174b179759f1f749dcca14.tar.gz android_packages_apps_Gallery2-f5d86db5891316b713174b179759f1f749dcca14.tar.bz2 android_packages_apps_Gallery2-f5d86db5891316b713174b179759f1f749dcca14.zip |
Use WeakReferenes to reduce Bitmap memory footprint
Use HashMap<Integer, WeakReference<Drawable>> instead of just
HashMap<Integer, Drawable>
Without this, references are still being held for Bitmap drawables,
thereby after few Photo edits, OutOfMemoryException is raised and
Gallery crashes
Conflicts:
src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java
Change-Id: If91f950986bd816d5571a0d51a7cb9522226e270
-rw-r--r-- | src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java index a7bd539fc..5f3502272 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java @@ -26,6 +26,7 @@ import android.graphics.drawable.Drawable; import com.android.gallery3d.data.DecodeUtils; import java.util.HashMap; +import java.lang.ref.WeakReference; public class ImageFilterBorder extends ImageFilter { private static final float NINEPATCH_ICON_SCALING = 10; @@ -33,7 +34,7 @@ public class ImageFilterBorder extends ImageFilter { private FilterImageBorderRepresentation mParameters = null; private Resources mResources = null; - private HashMap<Integer, Drawable> mDrawables = new HashMap<Integer, Drawable>(); + private HashMap<Integer, WeakReference<Drawable>> mDrawables = new HashMap<Integer, WeakReference<Drawable>>(); public ImageFilterBorder() { mName = "Border"; @@ -82,11 +83,11 @@ public class ImageFilterBorder extends ImageFilter { } public Drawable getDrawable(int rsc, int reqWidth, int reqHeight) { - Drawable drawable = mDrawables.get(rsc); + Drawable drawable = (mDrawables.get(rsc) != null) ? mDrawables.get(rsc).get() : null; if (drawable == null && mResources != null && rsc != 0) { drawable = new BitmapDrawable(mResources, DecodeUtils.decodeBitmap( mResources, rsc, reqWidth, reqHeight)); - mDrawables.put(rsc, drawable); + mDrawables.put(rsc, new WeakReference<Drawable>(drawable)); } return drawable; } |