Pull to refresh

Comments 5

стандартный ImageView на Android вызывает requestLayout… Решение — свой хендлер для миниатюр

if (collectionView.Handler?.PlatformView is not AndroidX.RecyclerView.Widget.RecyclerView recycler)

На Android и iOS код подменяет его на LinearItemsLayout.Vertical

На Android прокрутка такого указателя не доходила до последних букв

На iOS при ItemSizingStrategy="MeasureFirstItem" переиспользованная строка не перемерялась

Write Once Run Everywhere, который мы заслужили.

Спасибо, это хорошая выжимка. Согласна, что обещание «написал один раз» в MAUI не работает буквально: на Android и iOS приходится подкручивать отдельно. Но большая часть этих правок не специфична для MAUI: RecyclerView и requestLayout в нативном Android ведут себя так же. Специфичным я бы назвала только баг MeasureFirstItem на iOS в 10.0.110.
Если у вас есть опыт, где на другом стеке (нативном, Flutter) такие вещи решаются проще, поделитесь, мне правда интересно сравнить.

Конечно будет побыстрей, тк CollectionView по умолчанию использует паттерн пул для рендеринга элементов и переиспользует уже готовые элементы и заполняет их данными. В ListView надо включать стратегию кеширования вручную. который начинает использовать пул.
Включение ItemSizingStrategy="MeasureAllItems" позволило стандартизировать размеры и сняла некоторые вычисления по размеру элементов.
Попробуйте ещё поиграться с параметром RemainingItemsThreshold в сторону уменьшения и когда лист будет успевать рендерить новые элементы.

Подгрузку данных надо выкидывать в другой неблокирующий поток, и грузить сотнями.

Вообщем странно, что так долго рендерится, это лёгкая задача для видеокарты, на таких процессорах запускают мобильные игры, где списки бесконечные и показывают сразу по 40 элементов с данными и аватарками на экране со спецэффектами, а сзади по несколько сотен данных, например Leaderboard'ы. Дело явно не в фреймворке тк количество элементов повлияло на рендеринг.
Может вы рендерите не уменьшенные изображения, а 4к? тогда вероятно, что видеокарта захлёбывается.


Спасибо за идеи — часть из этого как раз уже в бою)

CollectionView вместо ListView уже сделала: у точек с HasUnevenRows виртуализация в MAUI просто не работала. Сам пул помог мало - больше выжали из шаблона строки и подготовки данных до привязки.

MeasureAllItems у нас не «ускоритель»: на Android стоит MeasureFirstItem при фиксированной высоте. MeasureAllItems только на iOS - иначе в MAUI 10 переиспользованная ячейка не пересчитывала подписи.

RemainingItemsThreshold тут слабо подходит: после фильтра в коллекции уже весь каталог, а рисуется только видимое окно. Кэш/RecycledViewPool у RecyclerView увеличивали именно под это.

Данные для строк считаем в фоне до биндинга; картинки - превью ~64 dp, не 4K. По dumpsys GPU у старой и новой версии почти одинаковый - тормозил CPU (разметка/биндинги).

На слабом K10 уже заметно лучше, но до «игрового» скролла через MAUI-ячейку с кучей полей, честно, ещё далеко. Если есть рабочий приём именно под такую строку - с радостью послушаю.

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

Sign up to leave a comment.

Articles