Возможно, вы захотите использовать свойство inSampleSize класса BitmapFactory.Options
. Это свойство будет изменять масштаб вашего изображения степенью 2 (которую вы решите) при создании растрового объекта, что позволит сэкономить память. Если разрешение изображения превышает разрешение экрана, это должно работать для вас без проблем, без ухудшения качества изображения.
Чтобы использовать это для изображения, которое вы загружаете с сервера, вы можете использовать его следующим образом:
URL url = new URL(photoUrl);
URLConnection ucon = url.openConnection();
Options options = new Options();
options.inSampleSize = 2;
Bitmap bitmap = BitmapFactory.decodeStream(ucon.getInputStream(),null, options);
В качестве альтернативы можно также обернуть каждый объект растрового изображения в вашем HashMap объектом SoftReference
, чтобы виртуальная машина освободила память, используемую растровыми изображениями, вместо сбоя с ошибкой OOM. Недостатком является то, что вам придется перезагрузить растровое изображение, и лично я чувствую, что виртуальная машина агрессивна при восстановлении памяти. Он восстанавливает память довольно быстро.