当前位置: 代码迷 >> Android >> Bitmap.recycle()后,Bitmap何时会被释放解决方案
  详细解决方案

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

热度:309   发布时间:2016-05-01 22:06:18.0
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就已经被释放掉了。
  相关解决方案