免责声明:我读了大约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()
)
如何解决此问题?
答案 0 :(得分:2)
罪魁祸首原来是RemoteControlClient.MetadataEditor.apply()
,它会调用recycle()
传递给它的位图。
答案 1 :(得分:0)
重新打开活动时,我遇到了与ImageView相似的问题(例如,在屏幕被唤醒后)。问题不在于Bitmap本身,而在于ImageView。我的解决方案是在活动的onPause()上将ImageView的setImageBitmap设置为null,并在activity的onResume()上调用setImageBitmap(theBitmap)。