在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被移除后才会释放?

解决方案 »

  1.   

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

  2.   


    这样啊……那如果高频率的新建createBitmap和recycle的话,在真机上是不是一定会溢出?例如把createBitmap和recycle放在MotionEvent.ACTION_MOVE里面  ( ・ω・ )
      

  3.   

    楼主这段代码有问题,溢出感觉不一定发生,但是应该会抛出异常,说使用了被recycle的bitmap。因为imageview的setImageBitmap函数不是立刻就使用bitmap来画图,而是先存下来,等imageView的onDraw函数被调用的时候才使用bitmap来画图,也就是说是一个异步过程。我认为在android中,对应用程序而言,应该认可以这么认为:当bitmap.recycle()调用后,bitmap就已经被释放掉了。