summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/data
diff options
context:
space:
mode:
authorSuman Mukherjee <sumam@codeaurora.org>2014-06-09 17:17:44 +0530
committerSuman Mukherjee <sumam@codeaurora.org>2014-06-09 17:17:44 +0530
commitbfdbd64ee7e4bbfead91366ccea218258a8ec845 (patch)
tree53c09ca1531fdd72c8e8080447b55ae6a32cf581 /src/com/android/camera/data
parent24a14562871c2f3277aadb5b0388ebf5b5e278dd (diff)
downloadandroid_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.java19
-rw-r--r--src/com/android/camera/data/FixedFirstDataAdapter.java2
-rw-r--r--src/com/android/camera/data/LocalDataList.java10
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);