Предупреждение об использовании Glide в Recyclerview

Я только начал переходить с Universal Image Loader на Glide. Однако при прокрутке вниз и снова вверх в recyclerview я получаю множество предупреждающих сообщений.

W/Bitmap: Called reconfigure on a bitmap that is in use! This may cause graphical corruption!

Если я заменю Glide на другую библиотеку загрузки изображений, предупреждение исчезнет. Код в bindViewHolder, связанный с изображениями:

   Glide.with(viewHolder.imageView.getContext())
            .load(DisplayImageUtil.getImageUrl(item.getImageUrl(), 600))
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .into(viewHolder.imageView);

Проверено на Nexus 5.


person Bendik    schedule 27.10.2015    source источник
comment
Это происходит на Android M? github.com/bumptech/glide/issues/743   -  person TWiStErRob    schedule 13.11.2015
comment
@Бендик. Проблема возникает, когда я прокручиваю вверх, и изображение загружается снова. Вы нашли какое-либо решение?   -  person Kartik Shah    schedule 18.12.2018


Ответы (5)


Я сталкиваюсь с той же проблемой после первого запуска моего приложения на Android M (Nexus 5x).

EDIT: после открытия задачи на Glide Github — https://github.com/bumptech/glide/issues/743 я обнаружил, что мое оригинальное «решение» не решает проблему, а только скрывает сообщения. Предупреждение исходит от растрового изображения Android, потому что Glide повторно использует растровое изображение для повышения производительности.

person JirkaV    schedule 13.11.2015
comment
Будьте осторожны, увеличение количества просмотров элементов в RecyclerView может привести к использованию большего объема памяти, чем необходимо. - person TWiStErRob; 13.11.2015
comment
@TWiStErRob - ты прав. Я скорее отредактировал ответ, чтобы не ввести кого-то в заблуждение по неправильному пути. - person JirkaV; 14.11.2015

Попробуйте вызвать Glide.clear() перед загрузкой изображения.

Glide.clear(viewHolder.imageView);
Glide.with(viewHolder.imageView.getContext())
        .load(DisplayImageUtil.getImageUrl(item.getImageUrl(), 600))
        .diskCacheStrategy(DiskCacheStrategy.ALL)
        .into(viewHolder.imageView);

Надеюсь, это поможет.

person Ramón Pérez Silva    schedule 26.04.2016
comment
добавление Glide.clear() не устранило проблему для меня :( - person Andrii Kovalchuk; 14.06.2016

Я получал предупреждение и графическое повреждение. Это было в виде обрезанных растровых изображений, появляющихся вверху и внизу представления ресайклера и остающихся там при слишком быстрой прокрутке.

Помещение представления изображения внутри макета кадра избавило от графического искажения.

person Meanman    schedule 11.07.2016

Вы можете очистить журналы с помощью фильтров Logcat в Android Studio.

Добавьте ^(?!AbsListView|IInputConnectionWrapper|ApplicationPackageManager|Bitmap|ViewRootImpl) в Regex фильтра Android Logcat.

person Avinash S    schedule 03.09.2016

Это обсуждается здесь ,

Обычно это результат неправильного использования растровых изображений, либо путем многократного возврата растрового изображения в пул без промежуточного получения, либо путем ссылки на растровое изображение после вызова clear() для соответствующей цели. Если у вас есть пользовательские преобразования, это хорошее место для тщательного изучения, чтобы убедиться, что вы не возвращаете растровое изображение в пул дважды. Подробнее об этой проблеме можно узнать на вики: https://github.com/bumptech/glide/wiki/Resource-re-use-in-Glide.

Журнал, который вы видите, взят из блока catch (перехваченное исключение). Убедитесь, что вы:

  • Не пытаться загрузить 2 растровых изображения в одном целевом представлении
  • Не очищать ресурс для повторного использования целевого представления, но удерживать ссылку на ресурс

поскольку вы используете recyclerView, возможно, вторая точка верна, т.е. перерабатывает представление, удерживая все ссылки на растровые изображения

person Karan    schedule 27.10.2015
comment
Я не уверен, что полностью понимаю проблему. Я не делаю никакой пользовательской переработки, я только загружаю изображение в bindViewHolder из RecyclerView. Проблема возникает, когда я прокручиваю вверх, и изображение загружается снова. Это что-то, что я должен обрабатывать вручную с помощью Glide? Раньше использовал только UIL и не сталкивался с такими проблемами. - person Bendik; 27.10.2015
comment
@Kay, какой блок catch ты имеешь в виду? Я обнаружил, что это предупреждение от родного Bitmap.cpp. - person TWiStErRob; 13.11.2015
comment
Этот ответ неверен, цитата ссылается на исключение IllegalArgumentException, а не на предупреждение здесь. Предупреждение в исходном вопросе появится при обычном использовании Glide и не является результатом неправильного использования растровых изображений. - person Sam Judd; 04.12.2015