Мое приложение может загружать довольно большие изображения. Чтобы сохранить консервативность памяти, я пытаюсь использовать временную растровую карту для загрузки, а другую для окончательного изображения после преобразования:
.....
finalBitmap.recycle();
finalBitmap = null;
Bitmap tempBitmap = BitmapFactory.decodeStream(fin, ...);
finalBitmap = Bitmap.createBitmap(tempBitmap, ....);
imgview.setImageBitmap(finalBitmap);
.....
Теперь, в этот момент мы закончили с tempBitmap, который был необходим только для переноса декодированного растрового изображения на этап преобразования в createBitmap. Итак:
.....
tempBitmap.recycle();
tempBitmap = null;
.....
И... он падает с ошибкой "пытается использовать переработанную растровую карту", особенно из-за утилизации tempBitmap. tempBitmap не отображается и используется только там.
Что здесь происходит? Должен ли я просто использовать finalBitmap и полагаться на createBitmap для управления им (finalBitmap= Bitmap.createBitmap( finalBitmap). strong > ,....))? Я не вижу, что будет продолжаться зависимость от tempBitmap, которая может вызвать такой отказ.
Изменить: Да, нулевое присвоение, похоже, приводит к соответствующей, возможной сборке мусора, но я озадачен тем, почему recycle() в temp Bitmap является настолько проблематичным в этом случае. У меня создается впечатление, что createBitmap() ссылается на него, но почему и на какой срок?