Comments 6
Спасибо за статью! Очень круто что поделились своим опытом!
Я же правильно понимаю, что вы полностью или почти полностью переписали приложение онлайн-кинотеатра на компоуз? Выглядит большим объемом работы.
А как много усилий на это потребовалось? Условный год работы десятка программистов или за неделю тимлид все переписал?
Удавалось ли переписывать поэтапно, сохраняя вьюхи местами, или приостанавливали разработку новых фич до полного переписывания?
Мы переписали самые важные экраны и все еще продолжаем этот процесс. Некоторые уже готовые экраны закрыты сейчас фиче-флагами. У нас есть дизайн-система для UI компонентов, поэтому некоторое время заняла адаптация ее для Compose, т.к. использовать View было не оптимально для производительности. Также, пару недель ушло у каждого чтобы "освоиться" с кодом на компоузе. Нельзя сказать, сколько ушло на одну главную, т.к. эта страница-трансформер, там много разных типов блоков, которые могут прийти с сервера и их нужно было поддержать. Плюс, решив все первоначальные проблемы и набив все "шишки", сейчас на один простой экран уйдет заметно меньше времени (некоторые новые экраны пишутся за день). Если посмотреть на тикет в Jira, то идея объединения архитектуры (и внедрения Compose) возникла в сентябре 2021, первые пробы завести Compose в ТВ - сентябрь 2022, первый релиз ТВ на компоузе, включающий в себя продуктовую доработку - август 2023. Небольшой командой платформы (< 10 разработчиков) с переключением на другие срочные задачи. Были также случаи "гонки" с другими продуктовыми фичами, которые решались индивидуально. Вьюхи сохранять можно, но только для простых ненагруженных экранов, т.к. перфоманс там начинает страдать и код с фокусами выглядит как "костыль".
А почему вьюхи тормозят? Их же можно не разрушать , то есть оставлять в памяти.
В качестве плеера используете ExoPlayer?
В целом где хранятся данные в compose приложении, во вью модель? Расскажите немного об архитектуре этого приложения на примере одного экрана
Проблемы с View начинаются, когда их много в Lazy-списках, они заметно снижают плавность по сравнению с чистым Compose, даже внутри remember. (так было на момент одной из альфа версий, возможно уже все получше).
Да, ExoPlayer. ViewModel в проект не затащили, используем самописную архтектуру Unidirectional Data Flow на базе RxJava -> Kotlin Flow, об этом, наверное, можно отдельную статью написать :)
Использование Compose для ТВ-версии приложения Иви: мощный фреймворк для создания эффективных Android-приложений