diff options
author | Suman Mukherjee <sumam@codeaurora.org> | 2014-06-09 17:17:44 +0530 |
---|---|---|
committer | Suman Mukherjee <sumam@codeaurora.org> | 2014-06-09 17:17:44 +0530 |
commit | bfdbd64ee7e4bbfead91366ccea218258a8ec845 (patch) | |
tree | 53c09ca1531fdd72c8e8080447b55ae6a32cf581 /src/com/android/camera/data | |
parent | 24a14562871c2f3277aadb5b0388ebf5b5e278dd (diff) | |
download | android_packages_apps_Snap-bfdbd64ee7e4bbfead91366ccea218258a8ec845.tar.gz android_packages_apps_Snap-bfdbd64ee7e4bbfead91366ccea218258a8ec845.tar.bz2 android_packages_apps_Snap-bfdbd64ee7e4bbfead91366ccea218258a8ec845.zip |
Camera: Mem-leak
Hprof identified memleak in localdatalist from list and hashmap
Reason: removedata was not getting invoked.
Fix Made: Invoke removedata from ondestroy and onresume of camera activity
Cleanup bitmaps before reallocation on same variable.
CRs-Fixed: 655256
Change-Id: I42d99beb7e493eea2394462ee02cbe956e86c502
Diffstat (limited to 'src/com/android/camera/data')
-rw-r--r-- | src/com/android/camera/data/CameraDataAdapter.java | 19 | ||||
-rw-r--r-- | src/com/android/camera/data/FixedFirstDataAdapter.java | 2 | ||||
-rw-r--r-- | src/com/android/camera/data/LocalDataList.java | 10 |
3 files changed, 25 insertions, 6 deletions
diff --git a/src/com/android/camera/data/CameraDataAdapter.java b/src/com/android/camera/data/CameraDataAdapter.java index 4643d03bf..ac61934fc 100644 --- a/src/com/android/camera/data/CameraDataAdapter.java +++ b/src/com/android/camera/data/CameraDataAdapter.java @@ -44,7 +44,7 @@ public class CameraDataAdapter implements LocalDataAdapter { private static final int DEFAULT_DECODE_SIZE = 1600; private static final String[] CAMERA_PATH = { Storage.DIRECTORY + "/%" ,SDCard.instance().getDirectory() + "/%"}; - private LocalDataList mImages; + private LocalDataList mImages = null; private Listener mListener; private Drawable mPlaceHolder; @@ -124,11 +124,18 @@ public class CameraDataAdapter implements LocalDataAdapter { @Override public void removeData(Context c, int dataID) { if (dataID >= mImages.size()) return; - LocalData d = mImages.remove(dataID); - // Delete previously removed data first. - executeDeletion(c); - mLocalDataToDelete = d; - mListener.onDataRemoved(dataID, d); + if (dataID == -1) { + if ( (mImages != null) && (mImages.size() > 0) ) { + mImages.cleanup(); + mImages = null; + } + } else { + LocalData d = mImages.remove(dataID); + // Delete previously removed data first. + executeDeletion(c); + mLocalDataToDelete = d; + mListener.onDataRemoved(dataID, d); + } } // TODO: put the database query on background thread diff --git a/src/com/android/camera/data/FixedFirstDataAdapter.java b/src/com/android/camera/data/FixedFirstDataAdapter.java index e26ec2785..f89f1ca94 100644 --- a/src/com/android/camera/data/FixedFirstDataAdapter.java +++ b/src/com/android/camera/data/FixedFirstDataAdapter.java @@ -67,6 +67,8 @@ public class FixedFirstDataAdapter extends AbstractLocalDataAdapterWrapper public void removeData(Context context, int dataID) { if (dataID > 0) { mAdapter.removeData(context, dataID - 1); + } else { + mAdapter.removeData(context, dataID); } } diff --git a/src/com/android/camera/data/LocalDataList.java b/src/com/android/camera/data/LocalDataList.java index 3ccc4de54..7e6fc453d 100644 --- a/src/com/android/camera/data/LocalDataList.java +++ b/src/com/android/camera/data/LocalDataList.java @@ -64,6 +64,16 @@ public class LocalDataList { return mUriMap.get(uri); } + public void cleanup() { + if ((mList != null) && (mList.size() > 0)) { + for(int i=0;i<mList.size();i++) { + remove(i); + } + } + mList = null; + mUriMap = null; + } + public void set(int pos, LocalData data) { mList.set(pos, data); mUriMap.put(data.getContentUri(), data); |