Android: ошибка «попытка использовать переработанное растровое изображение» с временными растровыми изображениями

Мое приложение может загружать довольно большие изображения. Стремясь сохранить память, я пытаюсь использовать временное растровое изображение для загрузки и другое для окончательного изображения после преобразования:

.....
finalBitmap.recycle();
finalBitmap = null;
Bitmap tempBitmap  = BitmapFactory.decodeStream(fin, ...);
finalBitmap = Bitmap.createBitmap(tempBitmap, ....);
imgview.setImageBitmap(finalBitmap);
.....

Теперь, на этом этапе мы закончили с tempBitmap, который был необходим только для транспортировки декодированного Bitmap на шаг преобразования в createBitmap. Итак:

.....
tempBitmap.recycle();
tempBitmap = null;
.....

И ... он вылетает с ошибкой «попытка использовать переработанное растровое изображение», в частности, из-за повторного использования tempBitmap. tempBitmap не отображался и используется только прямо здесь .

Что здесь не так? Должен ли я просто использовать "finalBitmap" повсюду и полагаться на createBitmap для управления им ( finalBitmap = Bitmap.createBitmap ( finalBitmap , ... .))? Я не понимаю, какая постоянная зависимость от tempBitmap могла бы вызвать такой сбой.

Изменить: Да, присвоение null, похоже, приводит к соответствующей, возможной сборке мусора, но я озадачен тем, почему recycle () во временном Bitmap так проблематичен в этом кейс. У меня создается впечатление, что createBitmap () содержит ссылку на него, но почему и как долго?

20
задан MartyMacGyver 2 November 2011 в 16:07
поделиться