aboutsummaryrefslogtreecommitdiff
path: root/library/src/main/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'library/src/main/java/com')
-rw-r--r--library/src/main/java/com/bumptech/glide/load/resource/gif/GifDrawable.java19
-rw-r--r--library/src/main/java/com/bumptech/glide/load/resource/gif/GifFrameManager.java4
2 files changed, 22 insertions, 1 deletions
diff --git a/library/src/main/java/com/bumptech/glide/load/resource/gif/GifDrawable.java b/library/src/main/java/com/bumptech/glide/load/resource/gif/GifDrawable.java
index acf1058d..fd5ea782 100644
--- a/library/src/main/java/com/bumptech/glide/load/resource/gif/GifDrawable.java
+++ b/library/src/main/java/com/bumptech/glide/load/resource/gif/GifDrawable.java
@@ -133,6 +133,22 @@ public class GifDrawable extends GlideDrawable implements GifFrameManager.FrameC
public void stop() {
isStarted = false;
stopRunning();
+
+ // On APIs > honeycomb we know our drawable is not being displayed anymore when it's callback is cleared and so
+ // we can use the absence of a callback as an indication that it's ok to clear our temporary data. Prior to
+ // honeycomb we can't tell if our callback is null and instead eagerly reset to avoid holding on to resources we
+ // no longer need.
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
+ reset();
+ }
+ }
+
+ /**
+ * Clears temporary data and resets the drawable back to the first frame.
+ */
+ private void reset() {
+ frameManager.clear();
+ invalidateSelf();
}
private void startRunning() {
@@ -222,8 +238,9 @@ public class GifDrawable extends GlideDrawable implements GifFrameManager.FrameC
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public void onFrameRead(int frameIndex) {
- if (Build.VERSION_CODES.HONEYCOMB <= Build.VERSION.SDK_INT && getCallback() == null) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB && getCallback() == null) {
stop();
+ reset();
return;
}
if (!isRunning) {
diff --git a/library/src/main/java/com/bumptech/glide/load/resource/gif/GifFrameManager.java b/library/src/main/java/com/bumptech/glide/load/resource/gif/GifFrameManager.java
index 42eea5d0..661e84d9 100644
--- a/library/src/main/java/com/bumptech/glide/load/resource/gif/GifFrameManager.java
+++ b/library/src/main/java/com/bumptech/glide/load/resource/gif/GifFrameManager.java
@@ -100,11 +100,15 @@ class GifFrameManager {
if (current != null) {
mainHandler.removeCallbacks(current);
Glide.clear(current);
+ current = null;
}
if (next != null) {
mainHandler.removeCallbacks(next);
Glide.clear(next);
+ next = null;
}
+
+ decoder.resetFrameIndex();
}
class DelayTarget extends SimpleTarget<Bitmap> implements Runnable {