在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就已经被释放掉了。