Android Bitmap回收

时间:2014-03-27 16:35:30

标签: android garbage-collection android-bitmap

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

我有一项活动。此活动从全局/静态类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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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