Android 中Bitmap相关会涉及到很多问题,如果没有及时释放bitmap,就会造成内存泄漏。经过一段时间的浸淫,对Android也越来越熟悉,对于内存泄漏的问题也会越来越关注。但是出乎意料的是,在一次项目中出现了因为太及时的释放了bitmap导致RuntimeException。
出现了这种问题,当然是stackoverflow走起了,经过艰辛的英语模糊理解后,针对自己的代码终于大致知道了问题所在了。
我们在用Bitmap渲染到ImageView等View中的时,如果在该View未回收,还处于window中,这个时候我们对该bitmap进行recycle(),那么恭喜你,就会出现:
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@412d7230
此时解决的办法也很简单,就是将该View设置渲染为NULL,再去回收bitmap。
eg:
Bitmap scaleBitmap = BitmapFactory.decodeFile(path.replaceAll("%25", "%"), options);
imageView.setImageBitmap(scaleBitmap); //scaleBitmap 渲染到imageView
.....
.....
if (scaleBitmap != null && !scaleBitmap.isRecycled()) {
image