Мое приложение может загружать довольно большие изображения. Стремясь сохранить память, я пытаюсь использовать временное растровое изображение для загрузки и другое для окончательного изображения после преобразования:
.....
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 () содержит ссылку на него, но почему и как долго?