Popalay/Tutors

RuntimeException: Canvas: trying to use a recycled bitmap

Opened this issue · 1 comments

Hey great library! but we have one problem where the app sometimes crashes for users during TutorialLayout::onDraw (using java).

Fatal Exception: java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@3febdf66 at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1282) at android.view.GLES20Canvas.drawBitmap(GLES20Canvas.java:579) at com.popalay.tutors.TutorialLayout.onDraw(TutorialLayout.java:133) at android.view.View.draw(View.java:15246) at android.widget.FrameLayout.draw(FrameLayout.java:598) at android.view.View.updateDisplayListIfDirty(View.java:14182) at android.view.View.getDisplayList(View.java:14204) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3441) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3420) at android.view.View.updateDisplayListIfDirty(View.java:14142) at android.view.View.getDisplayList(View.java:14204) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3441) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3420) at android.view.View.updateDisplayListIfDirty(View.java:14142) at android.view.View.getDisplayList(View.java:14204) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3441) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3420) at android.view.View.updateDisplayListIfDirty(View.java:14142) at android.view.View.getDisplayList(View.java:14204) at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:273) at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:279) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:318) at android.view.ViewRootImpl.draw(ViewRootImpl.java:2530) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2352) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1982) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5895) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) at android.view.Choreographer.doCallbacks(Choreographer.java:580) at android.view.Choreographer.doFrame(Choreographer.java:550) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5348) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:947) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:742)

Is there anything that can be done with this? without some kind of fix or workaround for this we will have to find a new solution for tutorials which is a shame cause this library is awesome, thanks!

I have the same issue, I think a possible solution will be on line 129 of TutorialLayout instead of if (bitmap == null) {return;}, add if (bitmap == null || bitmap.isRecycled()) {return;}