【发布时间】:2017-09-22 18:42:33
【问题描述】:
我在ImageView 上的不同Bitmaps 之间淡出,并希望从旧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 不会被释放,即使它们不再可见。
【问题讨论】:
-
您可以将您尝试的代码发布到
recycleBitmap吗? -
@BartekLipinski 当我添加 mBitmap.recycle();转换后发生错误。我已经更新了帖子中的代码。有什么想法吗?
-
但
td从oldDrawable变为newDrawable和newDrawable使用mBitmap -
@BartekLipinski 这是我在帖子中输入的一个错字。刚刚更新了帖子以反映正确的逻辑。有什么想法吗?
标签: android memory memory-management bitmap imageview