Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Владимир Шедько — Плавный скролл для нагруженно...

Владимир Шедько — Плавный скролл для нагруженного UI

Ozon Tech

June 02, 2022
Tweet

More Decks by Ozon Tech

Other Decks in Technology

Transcript

  1. • Сформулируем проблему • Выявим ее причины • Определим метрики

    для оценки результата • Рассмотрим несколько решений • Сравним результаты План
  2. • Не оптимально написаны компоненты, используемые внутри ViewHolder’а Какую «лишнюю»

    работу мы делаем на UI потоке? • Много изменений ViewHolder’а в методе onBindViewHolder
  3. В процессе разработки • Android profiler • Perfetto Инструменты для

    замеров производительности После релиза • FPS tracker
  4. • Переписать все на custom view, canvas, compose • Использовать

    общие пулы для вложенных во ViewHolder элементов • Мультикадровый bind • Bind в отдельном потоке Варианты решения проблемы
  5. Как должно работать? • Заполнение ViewHolder’а происходит за несколько кадров

    • Пользователь не видит частично заполненный ViewHolder
  6. Как должно работать? • Заполнение ViewHolder’а происходит за несколько кадров

    • Пользователь не видит частично заполненный ViewHolder
  7. Как должно работать? • Заполнение ViewHolder’а происходит за несколько кадров

    • Пользователь не видит частично заполненный ViewHolder
  8. Как должно работать? • Заполнение ViewHolder’а происходит за несколько кадров

    • Пользователь не видит частично заполненный ViewHolder
  9. Как должно работать? • Заполнение ViewHolder’а происходит за несколько кадров

    • Пользователь не видит частично заполненный ViewHolder
  10. Как должно работать? • Заполнение ViewHolder’а происходит за несколько кадров

    • Пользователь не видит частично заполненный ViewHolder
  11. Плюсы • Нет негативного влияния на UI • Нет необходимости

    переписывать вложенные во ViewHolder компоненты • Нет проблем с многопоточностью Плюсы и минусы решения Минусы • Разработчики вынуждены «на глаз» разделять bind на шаги • Время мультикадрового bind’а ограничено скроллингом через extra space
  12. • Во время заполнения пользователь может видеть плейсхолдер • Размеры

    плейсхолдеров должны совпадать с размером контента • Заполнение ViewHolder’а происходит вне UI потока Как должно работать?
  13. Сравнение решений Критерий Мультикадровый bind Bind на отдельном потоке Ограничение

    на время bind’а Да Нет Стабильность Hitch rate Средняя Высокая Проблемы с многопоточность Нет Да Плейсхолдеры Нет Да «Двойной» bind Нет Да Сложность реализации Средняя Высокая Требуется редактирование вложенных компонентов Нет Частично Нitch rate Средний Низкий