Recyclerview прокрутки лаг - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть несколько элементов в строке моего рециклера -> Под множеством я подразумеваю несколько по числу, а также несколько по типу, т.е. несколько изображений, текстовых изображений и т. Д. Ниже приводится суть, чтобы вы могли видеть все элементы: https://gist.github.com/Harshhb101/55e25da72e3a474aeeb422d5e231d3e3

Проблема в том, что мне нужно скрыть / показать эти элементы на основе параметра, который может иметь до 10 значений. Таким образом, у меня будет 10 типов строк. В настоящее время я создал только один макет для строки, в которой есть элементы для всех типов строк, а на некоторых мобильных устройствах прокрутка имеет задержку. В основном я получаю задержку, когда в строках есть изображения. Я использую Glide для загрузки изображений. Ниже приводится суть onBindView: https://gist.github.com/Harshhb101/e10feb2cccda9d698ff06487bbb879ef

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

Ответы [ 3 ]

0 голосов
/ 10 апреля 2019

Изучив код, я обнаружил несколько улучшений.

  1. Не делайте God ViewType (один тип представления для всех видов представлений).вместо этого создайте индивидуальный тип просмотра для каждого вида сообщений.таким образом, это устранит стоимость рендеринга всех представлений и сделает их видимыми и невидимыми во время выполнения. Эталонная демонстрация повторного просмотра с несколькими типами просмотра
  2. Используйте некоторые библиотеки загрузки изображений, чтобы вам не приходилось обрабатывать кэширование изображений и манипуляции с растровыми изображениями (будет хорошо Пикассо). Picasso
  3. И, наконец, избегайте выполнения сложных задач в onbind() вместо того, чтобы подготовить свой класс данных специально для просмотра переработчика (если требуется много вычислений, таких как манипуляции с тяжелыми строками и т. Д.), Перед настройкой адаптера просмотра переработчика.
0 голосов
/ 10 апреля 2019
  • Пожалуйста, объявите много типов представления вместо одного типа представления для многих видов.Это на самом деле делает код более читабельным, но не намного уменьшает задержку, потому что представление / просмотр списка повторного использования имеет механизм многократного использования.
  • Рекомендуется использовать фиксированный размер в RecycleView.
  • Я виделGlide используется для загрузки изображений.Так вы настраивали кеш?
  • Я сомневаюсь, что вы загружаете изображение с большим разрешением
0 голосов
/ 10 апреля 2019

Вам необходимо уменьшить размер изображений RecyclerView, чтобы сэкономить память и кэшировать их.Прочитайте this .

Также, если ваш ViewHolder содержит изображения с размером wrap_content, тогда изображения загружаются в полном размере, что очень плохо для производительности, например, если размер просмотра на экране составляет 48dp x 48dp и изображениеЭто Full HD, а затем HD HD Drawable будет загружен в память, что делает вашу прокрутку медленной и не плавной.

Я предлагаю использовать фиксированный размер в ViewHolder или переопределить размер изображения при загрузке в Glide

...