diff --git a/matrix/matrix-android/matrix-resource-canary/matrix-resource-canary-android/src/main/java/com/tencent/matrix/resource/ActivityLeakFixer.java b/matrix/matrix-android/matrix-resource-canary/matrix-resource-canary-android/src/main/java/com/tencent/matrix/resource/ActivityLeakFixer.java index 9d82510ec..76c031938 100644 --- a/matrix/matrix-android/matrix-resource-canary/matrix-resource-canary-android/src/main/java/com/tencent/matrix/resource/ActivityLeakFixer.java +++ b/matrix/matrix-android/matrix-resource-canary/matrix-resource-canary-android/src/main/java/com/tencent/matrix/resource/ActivityLeakFixer.java @@ -37,6 +37,7 @@ import java.lang.reflect.Field; import java.util.ArrayList; +import androidx.swiperefreshlayout.widget.CircularProgressDrawable; /** * Created by tangyinsheng on 2017/6/20. @@ -250,6 +251,7 @@ private static void recycleView(View view) { // Ignored. } + if (view.getBackground() != null) { view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @Override @@ -259,9 +261,16 @@ public void onViewAttachedToWindow(View v) { @Override public void onViewDetachedFromWindow(View v) { + Drawable drawable = v.getDrawable(); + if (drawable instanceof CircularProgressDrawable) { + v.removeOnAttachStateChangeListener(this); + return; + } try { - v.getBackground().setCallback(null); - v.setBackgroundDrawable(null); + if (drawable != null) { + v.getBackground().setCallback(null); + v.setBackgroundDrawable(null); + } } catch (Throwable ignored) { // Ignored. } @@ -421,4 +430,5 @@ private static void recycleViewGroup(ViewGroup vg) { unbindDrawablesAndRecycle(vg.getChildAt(i)); } } + }