首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Bitmap.recycle()后,Bitmap何时会被释放解决方案

2012-03-20 
Bitmap.recycle()后,Bitmap何时会被释放在Activity里面建立的Bitmap,在执行Bitmap.recycle()后,Bitmap何时

Bitmap.recycle()后,Bitmap何时会被释放
在Activity里面建立的Bitmap,在执行Bitmap.recycle()后,Bitmap何时会被释放

例如
Bitmap   bitmap   =   Bitmap.createBitmap(width,   height,   config);
imageView.setImageBitmap(bitmap);

imageView.setOnTouchListener(new   ImageView.OnTouchListener()   {
        @Override
        public   boolean   onTouch(View   v,   MotionEvent   e)   {
                Bitmap   newBitmap   =   Bitmap.createBitmap(width,   height,   config);
                imageView.setImageBitmap(newBitmap);
                bitmap.recycle();
        }
});

这个bitmap会在何时被释放呢?是view被刷新时释放的还是view被移除后才会释放?

[解决办法]
根据代码来看,recycle方法会调用Bitmap.cpp的Bitmap_recycle方法,
而Bitmap类中的finalize方法则调用了Bitmap.cpp中的Bitmap_destructor方法,
这两个native方法都可以释放到Bitmap在C层申请的内存,唯一的不同是recycle方法会把一些相关的引用计数置0.
垃圾回收的时机具体要看虚拟机的实现,有的虚拟机直到内存实在满足不了要求才会释放一些内存出来

[解决办法]
楼主这段代码有问题,溢出感觉不一定发生,但是应该会抛出异常,说使用了被recycle的bitmap。因为imageview的setImageBitmap函数不是立刻就使用bitmap来画图,而是先存下来,等imageView的onDraw函数被调用的时候才使用bitmap来画图,也就是说是一个异步过程。

我认为在android中,对应用程序而言,应该认可以这么认为:当bitmap.recycle()调用后,bitmap就已经被释放掉了。

热点排行