Connect with us

Разработка

Уменьшаем рекомпозиции для изображений в Jetpack Compose

Простой хак для повышения производительности приложения на Compose.

Опубликовано

/

     
     

При проверке приложения с целью улучшения скорости прокрутки списка я обнаружил, что изображения и иконки постоянно перекомпонуются, даже если их состояние не изменяется! Довольно странно, не правда ли? Например…

Когда counter меняется, Text1 пропускается, а Image все время перекомпонуется.

Уменьшаем рекомпозиции для изображений в Jetpack Compose

По всей видимости, проблема заключается в том, что Painter не считается stable типом. Это означает, что компилятор не может надежно определить, изменился ли объект, в результате чего приходится постоянно перекомпоновывать Image.

Посмотрите “Объяснение Стабильность в Jetpack Compose” от Бена Тренгроува.

Решение

Для векторных ресурсов мы можем использовать ImageVector вместо Painter, поскольку ImageVector считается стабильным типом, так как он помечен как @Immutable.

Уменьшаем рекомпозиции для изображений в Jetpack Compose

Для растровых изображений можно создать компонент-обертку, принимающий drawableResId вместо painter

Поскольку GetcontactImage (или Icon) принимает стабильные параметры (drawableResId: Int), то считается, что его можно пропустить, если его параметры не изменились.

Уменьшаем рекомпозиции для изображений в Jetpack Compose

Примечание: При разработке многократно используемых компонентов лучше передавать в качестве param типы drawableResId/color, а не Painter. Обратитесь к документации по Android.

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: