java.lang.OutOfMemoryError при преобразовании более 100 строк в байтовые массивы
Во-первых, я понимаю вопросы, касающиесяjava.lang.OutOfMemoryError
а растровые изображения уже задавались много раз раньше. Я также проверилЭффективное отображение растровых изображений стр.
Мой вариант использования:
Я храню два разных размера битовых карт в виде строк в базе данных SQLite. Первый размер растровых изображений составляет 50% ширины экрана, а второй размер составляет 100% ширины экрана.
Я использую RecyclerView, который отображает изображения в ImageViews, которые составляют 50% или 100% ширины экрана, поэтому растровые изображения загружаютсяне больше, чем нужно, и они имеют соответствующий размер, прежде чем изображения будут извлечены из базы данных.
Я также загружаю растровые изображения, используя AsyncTask.
У меня есть более 180 различных элементов в RecyclerView, поэтому у меня есть в общей сложности более 360 растровых изображений (т.е. числоOfimages * theDifferentSizesOfEachImage). Я покрываю строковые версии изображений в байтовые массивы с помощью этого кода:byte [] byteArray = Base64.decode(encodedString, Base64.DEFAULT);
Эта проблема
Деятельность смогла загрузить около 170 различных изображений безjava.lang.OutOfMemoryError
, если только я не перезапустил то же действие (например, загрузил действие, затем заново создал действие, щелкнув по нему снова в окне навигации, а затем повторив этот процесс), и взял на себяjava.lang.OutOfMemoryError
при преобразовании строк в байтовые массивы.
Я преобразую массив байтов в растровое изображение, используяскольжение библиотека с использованием следующего кода:
Bitmap bitmap = Glide.with(context).load(byteArray).asBitmap()
.dontTransform().dontAnimate().skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE).into(-1, -1).get();
Мой вопрос в двух словах
Как мне избежатьjava.lang.OutOfMemoryError
происходит, пока я конвертирую строки в байтовые массивы?
Заметка
После создания растрового изображения с помощью Glide я вызываю recycle () для данного растрового изображения и затем устанавливаю его вnull
.
Я также уже используюandroid:largeHeap="true"
в моем Android манифесте
заранее спасибо
редактировать
Вот как я создаю растровые строки:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.WEBP,100, baos);
byte [] b =baos.toByteArray();
String bitmapString = Base64.encodeToString(b, Base64.DEFAULT);