我在Bitmaps
上的不同ImageView
之间褪色,并且希望回收/发布Bitmap
中不再可见的旧ImageView
图片过渡后。
final Bitmap newBitmap = //this is a bitmap
final Bitmap oldBitmap = //this is a bitmap
final Drawable oldDrawable = new BitmapDrawable(getResources(), oldBitmap);
final Drawable newDrawable = new BitmapDrawable(getResources(), mBitmap);
Drawable[] drawables = new Drawable[]{oldDrawable, newDrawable};
final TransitionDrawable td = new TransitionDrawable(drawables);
this.runOnUiThread(new Runnable() {
@Override
public void run() {
mImage.setImageDrawable(td);
td.startTransition(1000);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
oldBitmap.recycle();
}
}, 1050);
}
});
当我尝试在转换结束后回收旧的Bitmap
时,我收到以下错误:
java.lang.RuntimeException:Canvas:尝试使用循环位图android.graphics.Bitmap
转换完成后有没有办法回收Bitmap
,以便释放内存而不会导致错误?
注意:当转换经历多个图像时,最终设备内存不足,因为先前设置的Bitmaps
即使不再可见也不会被释放。
答案 0 :(得分:0)
这可能是因为td
仍然持有(和使用)oldDrawable
,即使它没有显示它。
我建议打电话:
mImage.setImageDrawable(newDrawable);
在回收oldBitmap
之前。这样就不应再使用td
oldBitmap
了,{{component modalComponent options=modalOptions}}
应该很容易回收。