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 0e7e02d0f1973ed3332e0e3f0dabfab07f554029 Mon Sep 17 00:00:00 2001 From: chenhailiang <> Date: Wed, 17 Nov 2021 09:33:13 +0800 Subject: [PATCH 2/3] restore --- .../matrix/resource/ActivityLeakFixer.java | 16 ---------------- 1 file changed, 16 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..9d82510ec 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,7 +287,6 @@ private static void recycleImageView(ImageView iv) { } iv.setImageDrawable(null); - recycleBitmap(d); } private static void recycleTextView(TextView tv) { @@ -295,7 +294,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); @@ -332,13 +330,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); } } @@ -388,7 +384,6 @@ private static void recycleFrameLayout(FrameLayout fl) { if (fg != null) { fg.setCallback(null); fl.setForeground(null); - recycleBitmap(fg); } } } @@ -416,7 +411,6 @@ private static void recycleLinearLayout(LinearLayout ll) { if (dd != null) { dd.setCallback(null); ll.setDividerDrawable(null); - recycleBitmap(dd); } } } @@ -427,14 +421,4 @@ 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 97b1b85a6edca7671e2b795a04943a1caf82c224 Mon Sep 17 00:00:00 2001 From: chenhailiang <> Date: Wed, 17 Nov 2021 11:07:33 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=A6=82=E6=9E=9C=E7=AC=AC=E4=B8=80?= =?UTF-8?q?=E6=AC=A1=E5=9C=A8activity=E5=88=9B=E5=BB=BA=EF=BC=8C=E5=88=99?= =?UTF-8?q?=E5=BA=94=E8=AF=A5=E5=9C=A8onCreate=E4=B9=8B=E5=89=8D=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E6=B3=A8=E5=86=8Cactivity=E7=94=9F=E5=91=BD?= =?UTF-8?q?=E5=91=A8=E6=9C=9F=E5=9B=9E=E8=B0=83=EF=BC=8C=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E6=BC=8F=E6=8E=89=E7=AC=AC=E4=B8=80=E6=AC=A1onCreate=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=AF=BC=E8=87=B4activity=E7=BB=9F=E8=AE=A1=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E5=87=8F=E5=B0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../matrix/trace/TestTraceMainActivity.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/samples/sample-android/app/src/main/java/sample/tencent/matrix/trace/TestTraceMainActivity.java b/samples/sample-android/app/src/main/java/sample/tencent/matrix/trace/TestTraceMainActivity.java index 6dee04adc..7629893a3 100644 --- a/samples/sample-android/app/src/main/java/sample/tencent/matrix/trace/TestTraceMainActivity.java +++ b/samples/sample-android/app/src/main/java/sample/tencent/matrix/trace/TestTraceMainActivity.java @@ -49,16 +49,23 @@ public class TestTraceMainActivity extends Activity implements IAppForeground { private static final int PERMISSION_REQUEST_CODE = 0x02; @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.test_trace); - IssueFilter.setCurrentFilter(IssueFilter.ISSUE_TRACE); + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(newBase); + // If this is the first time you call this function in activity,you should call it before onCreate Plugin plugin = Matrix.with().getPluginByClass(TracePlugin.class); if (!plugin.isPluginStarted()) { MatrixLog.i(TAG, "plugin-trace start"); plugin.start(); } + } + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.test_trace); + IssueFilter.setCurrentFilter(IssueFilter.ISSUE_TRACE); + decorator = FrameDecorator.getInstance(this); if (!canDrawOverlays()) { requestWindowPermission();