2014-03-27 30 views
1

免责声明:我读了大约20个现有问题。不幸的是他们都没有解决我的问题。Android位图回收

我有一个活动。此活动从全局/静态类C获取位图,并将位图设置为ImageView。活动结束后,我尝试重新打开该活动,但得到java.lang.RuntimeException: Canvas: trying to use a recycled bitmap例外。任何时候我都不会拨打Bitmap.recycle()。另外,我不删除C级位图参考我尝试以下,但他们没有工作:

  • 呼叫ImageView.setDrawingCacheEnabled(false)
  • 之前设置位图ImageView,做一个深拷贝(通过Bitmap.copy()方法)

此外,我在整个活动生命周期中放置了一些日志语句。在onDestroy()内部,在致电super.onDestroy()之前,我检查并确保位图不被回收(通过Bitmap.isRecycled()

我该如何解决这个问题?

回答

2

罪魁祸首原来是RemoteControlClient.MetadataEditor.apply(),它确实调用recycle()传递给它的位图。

0

重新打开活动时(例如,屏幕被唤醒后),我与ImageView有类似的问题。问题不在于Bitmap本身,而在于ImageView。我的解决方案是在活动的onPause()上将ImageView的setImageBitmap设置为null,并在activity的onResume()上调用setImageBitmap(theBitmap)。

+0

也尝试过了,不幸的是没有工作。 – kolistivra