From a139c21d317cf04997916923501cd6b56412470b Mon Sep 17 00:00:00 2001 From: Tim Malseed Date: Sun, 12 Jun 2016 23:55:52 +1000 Subject: [PATCH] Additional resource cleanup in RSBlur When the blur is finished, the input, output, and blur are all destroyed, along with the renderscript instance. This resolves a strictmode 'resource acquired but never released' violation. --- .../transformations/internal/RSBlur.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/transformations/src/main/java/jp/wasabeef/glide/transformations/internal/RSBlur.java b/transformations/src/main/java/jp/wasabeef/glide/transformations/internal/RSBlur.java index 6279152..025b416 100644 --- a/transformations/src/main/java/jp/wasabeef/glide/transformations/internal/RSBlur.java +++ b/transformations/src/main/java/jp/wasabeef/glide/transformations/internal/RSBlur.java @@ -31,14 +31,16 @@ public class RSBlur { @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) public static Bitmap blur(Context context, Bitmap bitmap, int radius) throws RSRuntimeException { RenderScript rs = null; + Allocation input = null; + Allocation output = null; + ScriptIntrinsicBlur blur = null; try { rs = RenderScript.create(context); rs.setMessageHandler(new RenderScript.RSMessageHandler()); - Allocation input = - Allocation.createFromBitmap(rs, bitmap, Allocation.MipmapControl.MIPMAP_NONE, + input = Allocation.createFromBitmap(rs, bitmap, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT); - Allocation output = Allocation.createTyped(rs, input.getType()); - ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); + output = Allocation.createTyped(rs, input.getType()); + blur = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); blur.setInput(input); blur.setRadius(radius); @@ -48,6 +50,15 @@ public class RSBlur { if (rs != null) { rs.destroy(); } + if (input != null) { + input.destroy(); + } + if (output != null) { + output.destroy(); + } + if (blur != null) { + blur.destroy(); + } } return bitmap;