E: FATAL EXCEPTION: main
Process: *, PID: 22482
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@24e46ab
at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1280)
at android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:257)
at android.graphics.Canvas.drawBitmap(Canvas.java:1424)
at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:528)
at android.widget.ImageView.onDraw(ImageView.java:1316)
at android.view.View.draw(View.java:17293)
at android.view.View.updateDisplayListIfDirty(View.java:16275)
at android.view.View.draw(View.java:17059)
at android.view.ViewGroup.drawChild(ViewGroup.java:3731)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3517)
at android.view.View.updateDisplayListIfDirty(View.java:16270)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3715)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3695)
at android.view.View.updateDisplayListIfDirty(View.java:16238)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3715)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3695)
at android.view.View.updateDisplayListIfDirty(View.java:16238)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3715)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3695)
at android.view.View.updateDisplayListIfDirty(View.java:16238)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3715)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3695)
at android.view.View.updateDisplayListIfDirty(View.java:16238)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3715)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3695)
at android.view.View.updateDisplayListIfDirty(View.java:16238)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3715)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3695)
at android.view.View.updateDisplayListIfDirty(View.java:16238)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3715)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3695)
at android.view.View.updateDisplayListIfDirty(View.java:16238)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:652)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:658)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:766)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2834)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2642)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2249)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1280)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6432)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874)
at android.view.Choreographer.doCallbacks(Choreographer.java:686)
at android.view.Choreographer.doFrame(Choreographer.java:621)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6374)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
D: App Event: crash
应用程序崩溃,但如何理解导致它崩溃的原因和位置?我用调试器查看,但那里的一切都大致相同,我的应用程序没有单一方法 - 只有标准方法。
叫他
bitmap.recycle()。快速的解决方案是不调用bitmap.recycle();,这对于android >2.3.3不是严格要求的。如果您无论如何都想释放该内存,则需要找到一种方法来检查何时真正不再需要位图(即 Canvas 有机会完成其绘图操作)。