summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAngus Kong <shkong@google.com>2013-07-17 15:59:03 -0700
committerAngus Kong <shkong@google.com>2013-07-17 15:59:03 -0700
commitc40c411683da5db1e393e2172a451c3f9c511811 (patch)
tree777528912a5363b1d6e349db5ad87c189b605d40
parentc0d712e074fc38463464516befb7ea145654d21b (diff)
downloadandroid_packages_apps_Snap-c40c411683da5db1e393e2172a451c3f9c511811.tar.gz
android_packages_apps_Snap-c40c411683da5db1e393e2172a451c3f9c511811.tar.bz2
android_packages_apps_Snap-c40c411683da5db1e393e2172a451c3f9c511811.zip
Refine MediaSaveService to use memory limit.
Change-Id: Ieeb06eddbd742896ecb7c50f0f51facaa77b2d21
-rw-r--r--src/com/android/camera/MediaSaveService.java28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/com/android/camera/MediaSaveService.java b/src/com/android/camera/MediaSaveService.java
index e37b45cf2..40675b8c0 100644
--- a/src/com/android/camera/MediaSaveService.java
+++ b/src/com/android/camera/MediaSaveService.java
@@ -36,15 +36,16 @@ import java.io.File;
* Service for saving images in the background thread.
*/
public class MediaSaveService extends Service {
- private static final int SAVE_TASK_LIMIT = 3;
- private static final String TAG = MediaSaveService.class.getSimpleName();
+ // The memory limit for unsaved image is 20MB.
+ private static final int SAVE_TASK_MEMORY_LIMIT = 20 * 1024 * 1024;
+ private static final String TAG = "CAM_" + MediaSaveService.class.getSimpleName();
private final IBinder mBinder = new LocalBinder();
- private int mTaskNumber;
private Listener mListener;
+ // Memory used by the total queued save request, in bytes.
+ private long mMemoryUse;
interface Listener {
-
public void onQueueStatus(boolean full);
}
@@ -74,14 +75,13 @@ public class MediaSaveService extends Service {
@Override
public void onCreate() {
- mTaskNumber = 0;
+ mMemoryUse = 0;
}
public boolean isQueueFull() {
- return (mTaskNumber >= SAVE_TASK_LIMIT);
+ return (mMemoryUse >= SAVE_TASK_MEMORY_LIMIT);
}
- // Runs in main thread
public void addImage(final byte[] data, String title, long date, Location loc,
int width, int height, int orientation, ExifInterface exif,
OnMediaSavedListener l, ContentResolver resolver) {
@@ -93,13 +93,20 @@ public class MediaSaveService extends Service {
(loc == null) ? null : new Location(loc),
width, height, orientation, exif, resolver, l);
- mTaskNumber++;
+ mMemoryUse += data.length;
if (isQueueFull()) {
onQueueFull();
}
t.execute();
}
+ public void addImage(final byte[] data, String title, Location loc,
+ int width, int height, int orientation, ExifInterface exif,
+ OnMediaSavedListener l, ContentResolver resolver) {
+ addImage(data, title, System.currentTimeMillis(), loc, width, height,
+ orientation, exif, l, resolver);
+ }
+
public void addVideo(String path, long duration, ContentValues values,
OnMediaSavedListener l, ContentResolver resolver) {
// We don't set a queue limit for video saving because the file
@@ -161,8 +168,9 @@ public class MediaSaveService extends Service {
@Override
protected void onPostExecute(Uri uri) {
if (listener != null) listener.onMediaSaved(uri);
- mTaskNumber--;
- if (mTaskNumber == SAVE_TASK_LIMIT - 1) onQueueAvailable();
+ boolean previouslyFull = isQueueFull();
+ mMemoryUse -= data.length;
+ if (isQueueFull() != previouslyFull) onQueueAvailable();
}
}