【问题标题】:java.lang.RuntimeException: Canvas: trying to use a recycled bitmap, Unable to trace exact locationjava.lang.RuntimeException:画布:尝试使用回收的位图,无法跟踪确切位置
【发布时间】:2015-12-04 04:49:13
【问题描述】:

在我的应用程序中,我在多个位置/活动中使用位图,并在相应的活动销毁时回收所有这些。 我已经从那里提到了异常的完整堆栈跟踪,显然由于仍在使用回收的位图而发生了异常,但我无法跟踪该类或位图。任何人都可以帮助我如何在我的应用程序中跟踪崩溃的位置

java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@42d3c090
       at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1084)
       at android.view.GLES20Canvas.drawBitmap(GLES20Canvas.java:844)
       at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:490)
       at android.widget.ImageView.onDraw(ImageView.java:1019)
       at android.view.View.draw(View.java:14465)
       at android.view.View.getDisplayList(View.java:13362)
       at android.view.View.getDisplayList(View.java:13404)
       at android.view.View.draw(View.java:14182)
       at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
       at android.view.View.draw(View.java:14468)
       at android.view.View.getDisplayList(View.java:13362)
       at android.view.View.getDisplayList(View.java:13404)
       at android.view.View.draw(View.java:14182)
       at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
       at android.view.View.draw(View.java:14468)
       at android.support.v4.view.ViewPager.draw(ViewPager.java:2156)
       at android.view.View.getDisplayList(View.java:13362)
       at android.view.View.getDisplayList(View.java:13404)
       at android.view.View.draw(View.java:14182)
       at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
       at android.view.View.draw(View.java:14468)
       at android.view.View.getDisplayList(View.java:13362)
       at android.view.View.getDisplayList(View.java:13404)
       at android.view.View.draw(View.java:14182)
       at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
       at android.view.View.draw(View.java:14468)
       at android.view.View.getDisplayList(View.java:13362)
       at android.view.View.getDisplayList(View.java:13404)
       at android.view.View.draw(View.java:14182)
       at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
       at android.view.View.getDisplayList(View.java:13357)
       at android.view.View.getDisplayList(View.java:13404)
       at android.view.View.draw(View.java:14182)
       at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
       at android.view.View.getDisplayList(View.java:13357)
       at android.view.View.getDisplayList(View.java:13404)
       at android.view.View.draw(View.java:14182)
       at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
       at android.view.View.draw(View.java:14468)
       at android.widget.FrameLayout.draw(FrameLayout.java:472)
       at android.view.View.getDisplayList(View.java:13362)
       at android.view.View.getDisplayList(View.java:13404)
       at android.view.View.draw(View.java:14182)
       at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
       at android.support.v4.widget.DrawerLayout.drawChild(DrawerLayout.java:769)
       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
       at android.view.View.getDisplayList(View.java:13357)
       at android.view.View.getDisplayList(View.java:13404)
       at android.view.View.draw(View.java:14182)
       at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
       at android.view.View.draw(View.java:14468)
       at android.widget.FrameLayout.draw(FrameLayout.java:472)
       at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2326)
       at android.view.View.getDisplayList(View.java:13362)
       at android.view.View.getDisplayList(View.java:13404)
       at android.view.HardwareRenderer$GlRenderer.buildDisplayList(HardwareRenderer.java:1570)
       at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1449)
       at android.view.ViewRootImpl.draw(ViewRootImpl.java:2377)
       at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2249)
       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1879)
       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)
       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
       at android.view.Choreographer.doCallbacks(Choreographer.java:574)
       at android.view.Choreographer.doFrame(Choreographer.java:544)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
       at android.os.Handler.handleCallback(Handler.java:733)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:136)
       at android.app.ActivityThread.main(ActivityThread.java:5034)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
       at dalvik.system.NativeStart.main(NativeStart.java)

这是我第一次发布/提问,所以请忽略语言。

【问题讨论】:

  • 你可能需要展示一些相关的代码。
  • @ci_如果可能有多个包并且日志没有显示异常来自哪里,他如何显示相关代码???

标签: android android-activity bitmap runtimeexception bitmapfactory


【解决方案1】:

编写以下代码以防止在画布中使用位图时出现此类异常。

if (mBitmap != null && !mBitmap.isRecycled()) {
    //Write code to show bitmap to canvas
}else{
    //write code to recreate bitmap from source
    //Write code to show bitmap to canvas
}

【讨论】:

  • 如果我看不到该异常是从哪里引发的,该在哪里写?
  • @CodeToLife 当您不再使用位图时需要编写。就像您可以在方法末尾或片段不可见时编写一样。
  • 是的,但是......我的意思是这样的位图有多种用途,并且在使用后它们会被回收,但是其中一种动画或可绘制对象(也很多)或任何使用位图的东西(ex-或implicitely ) 确实通过了这个错误。而且我无法追踪代码的和平是否会降低这一点。那个 logcat 没有意义。我可能想找到一些替代工具,例如 profiler 。我认为这是一个非常具体的话题,我已经给它加了星标。
  • 我认为您可以使用“github.com/square/leakcanary”来识别您的泄漏。这可能有助于识别。
猜你喜欢
  • 2013-07-12
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 2014-08-24
  • 2013-05-17
相关资源
最近更新 更多