aboutsummaryrefslogtreecommitdiff
path: root/library/src/main/java/com/bumptech/glide/manager
diff options
context:
space:
mode:
authorSam Judd <judds@google.com>2014-08-30 11:53:27 -0700
committerSam Judd <judds@google.com>2014-08-30 11:53:27 -0700
commit43c082540013abdd5b5aca4b8c6ed2e1cb335f06 (patch)
tree1031449b9667040ca034df172b1304b862b887de /library/src/main/java/com/bumptech/glide/manager
parentf3c7a66fbe8c2fee588baed934b7c66dc1b72f05 (diff)
downloadglide-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.java25
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();
+ }
}
}
}