From 946b0ff1d7368f4780ffeea239cd040d74403a59 Mon Sep 17 00:00:00 2001 From: chenhailiang <> Date: Fri, 12 Nov 2021 09:46:43 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:ActivityLeakFixer=E4=B8=ADdrawable?= =?UTF-8?q?=E5=BA=94=E8=AF=A5=E5=B0=BD=E5=BF=AB=E6=B8=85=E9=99=A4native?= =?UTF-8?q?=E5=B1=82=E5=BC=95=E7=94=A8=E7=9A=84bitmap=E5=AF=B9=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../matrix/resource/ActivityLeakFixer.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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..ad6325081 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 @@ -287,6 +287,7 @@ private static void recycleImageView(ImageView iv) { } iv.setImageDrawable(null); + recycleBitmap(d); } private static void recycleTextView(TextView tv) { @@ -294,6 +295,7 @@ private static void recycleTextView(TextView tv) { for (Drawable d : ds) { if (d != null) { d.setCallback(null); + recycleBitmap(d); } } tv.setCompoundDrawables(null, null, null, null); @@ -330,11 +332,13 @@ private static void recycleProgressBar(ProgressBar pb) { if (pd != null) { pb.setProgressDrawable(null); pd.setCallback(null); + recycleBitmap(pd); } final Drawable id = pb.getIndeterminateDrawable(); if (id != null) { pb.setIndeterminateDrawable(null); id.setCallback(null); + recycleBitmap(id); } } @@ -384,6 +388,7 @@ private static void recycleFrameLayout(FrameLayout fl) { if (fg != null) { fg.setCallback(null); fl.setForeground(null); + recycleBitmap(fg); } } } @@ -411,6 +416,7 @@ private static void recycleLinearLayout(LinearLayout ll) { if (dd != null) { dd.setCallback(null); ll.setDividerDrawable(null); + recycleBitmap(dd); } } } @@ -421,4 +427,14 @@ private static void recycleViewGroup(ViewGroup vg) { unbindDrawablesAndRecycle(vg.getChildAt(i)); } } + + private static void recycleBitmap(Drawable drawable){ + if(drawable instanceof BitmapDrawable){ + Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); + if(!bitmap.isRecycled()){ + bitmap.recycle(); + } + } + + } } From 1984896ca02f05f7f0e60d5db81913e908b0b3d2 Mon Sep 17 00:00:00 2001 From: chenhailiang <> Date: Tue, 16 Nov 2021 18:13:22 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:swiperefreshlayout=20=E7=A9=BA=E6=8C=87?= =?UTF-8?q?=E9=92=88=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tencent/matrix/resource/ActivityLeakFixer.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) 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 ad6325081..ec4e47446 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. } From 56e73803c4152cfdc1a7c370c3a08cba70dad947 Mon Sep 17 00:00:00 2001 From: chenhailiang <> Date: Tue, 16 Nov 2021 18:42:31 +0800 Subject: [PATCH 3/3] delete some file --- .../matrix/resource/ActivityLeakFixer.java | 15 --------------- 1 file changed, 15 deletions(-) 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 ec4e47446..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 @@ -296,7 +296,6 @@ private static void recycleImageView(ImageView iv) { } iv.setImageDrawable(null); - recycleBitmap(d); } private static void recycleTextView(TextView tv) { @@ -304,7 +303,6 @@ private static void recycleTextView(TextView tv) { for (Drawable d : ds) { if (d != null) { d.setCallback(null); - recycleBitmap(d); } } tv.setCompoundDrawables(null, null, null, null); @@ -341,13 +339,11 @@ private static void recycleProgressBar(ProgressBar pb) { if (pd != null) { pb.setProgressDrawable(null); pd.setCallback(null); - recycleBitmap(pd); } final Drawable id = pb.getIndeterminateDrawable(); if (id != null) { pb.setIndeterminateDrawable(null); id.setCallback(null); - recycleBitmap(id); } } @@ -397,7 +393,6 @@ private static void recycleFrameLayout(FrameLayout fl) { if (fg != null) { fg.setCallback(null); fl.setForeground(null); - recycleBitmap(fg); } } } @@ -425,7 +420,6 @@ private static void recycleLinearLayout(LinearLayout ll) { if (dd != null) { dd.setCallback(null); ll.setDividerDrawable(null); - recycleBitmap(dd); } } } @@ -437,13 +431,4 @@ private static void recycleViewGroup(ViewGroup vg) { } } - private static void recycleBitmap(Drawable drawable){ - if(drawable instanceof BitmapDrawable){ - Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); - if(!bitmap.isRecycled()){ - bitmap.recycle(); - } - } - - } }