diff options
author | Sam Judd <judds@google.com> | 2014-08-30 11:53:27 -0700 |
---|---|---|
committer | Sam Judd <judds@google.com> | 2014-08-30 11:53:27 -0700 |
commit | 43c082540013abdd5b5aca4b8c6ed2e1cb335f06 (patch) | |
tree | 1031449b9667040ca034df172b1304b862b887de /library/src/main/java/com/bumptech/glide/manager | |
parent | f3c7a66fbe8c2fee588baed934b7c66dc1b72f05 (diff) | |
download | glide-43c082540013abdd5b5aca4b8c6ed2e1cb335f06.tar.gz |
Don't start new requests while paused.
Fixes #90
Diffstat (limited to 'library/src/main/java/com/bumptech/glide/manager')
-rw-r--r-- | library/src/main/java/com/bumptech/glide/manager/RequestTracker.java | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/library/src/main/java/com/bumptech/glide/manager/RequestTracker.java b/library/src/main/java/com/bumptech/glide/manager/RequestTracker.java index e5c05b0a..4796edb3 100644 --- a/library/src/main/java/com/bumptech/glide/manager/RequestTracker.java +++ b/library/src/main/java/com/bumptech/glide/manager/RequestTracker.java @@ -17,11 +17,20 @@ public class RequestTracker { // can always make repeated requests into targets other than views, or use an activity manager in a fragment pager // where holding strong references would steadily leak bitmaps and/or views. private final Set<Request> requests = Collections.newSetFromMap(new WeakHashMap<Request, Boolean>()); + private boolean isPaused; /** * Starts tracking the given request. */ - public void addRequest(Request request) { + public void runRequest(Request request) { + requests.add(request); + if (!isPaused) { + request.begin(); + } + } + + // Exposed for testing. + void addRequest(Request request) { requests.add(request); } @@ -36,6 +45,7 @@ public class RequestTracker { * Stops any in progress requests. */ public void pauseRequests() { + isPaused = true; for (Request request : requests) { if (!request.isComplete() && !request.isFailed()) { request.clear(); @@ -47,6 +57,7 @@ public class RequestTracker { * Starts any not yet completed or failed requests. */ public void resumeRequests() { + isPaused = false; for (Request request : requests) { if (!request.isComplete() && !request.isRunning()) { request.begin(); @@ -69,10 +80,18 @@ public class RequestTracker { public void restartRequests() { for (Request request : requests) { if (request.isFailed()) { - request.begin(); + if (isPaused) { + // Ensure the request will be restarted in onResume. + request.clear(); + } else { + request.begin(); + } } else if (!request.isComplete()) { + // Make sure we re-queue the request, we may just have not received the failure yet. request.clear(); - request.begin(); + if (!isPaused) { + request.begin(); + } } } } |