Site icon AppTractor

10 причин НЕ использовать Jetpack Compose

Jetpack Compose — это отличный набор инструментов для создания пользовательского интерфейса, который был тепло встречен сообществом Android-разработчиков. Мне нравится Jetpack Compose, но, как и любая другая технология, он имеет ряд недостатков. В этой статье мы узнаем, в каких случаях лучше использовать систему View и почему (в специальных блоках даются комментарии читателей к этой статье).

1. Наименьшее количество зависимостей

Если вам требуется минимум зависимостей, например, в целях совместимости или безопасности, лучше использовать систему View. Система View не требует дополнительного импорта. Она находится внутри системы Android, в отличие от Jetpack Compose, которая требует множества зависимостей, увеличивая размер пакета и потребление памяти во время выполнения, а также открывая поле для дополнительных рисков.

Система представлений также имеет множество зависимостей. Jetpack, а до этого Appcompat, предоставляет множество библиотек, так что да, вы можете перейти на ваниль, но даже до появления Jetpack Compose никто не переходил на ваниль (RecyclerView, ViewPager, ConstraintLayout, CameraX и т.д.).

2. Производительность

Система View существует с первой версии Android, она очень развита, за 15 лет было проведено множество оптимизаций, и ее производительность для сложных макетов обычно выше, чем у Jetpack Compose. Jetpack Compose улучшается с каждой итерацией и уже иногда превосходит View. Следите за этим, View может скоро потерять корону короля производительности.

В вашей же ссылке говорится, что да, время сборки немного меньше, но производительность во время выполнения, вероятно, лучше у Jetpack Compose, потому что меньше наследований и больше оптимизаций от компилятора. Кроме того, система View печально известна тем, что вычисления макета выполняются дважды, что приводит к снижению производительности сложных макетов! У Jetpack Compose такой проблемы нет (и об этом говорится в вашей же ссылке ;)).

3. Тесты Espresso

Если у вас много эспрессо-тестов на основе View или если вы хотите использовать функцию записи тестов в Android Studio, лучше отказаться от использования Jetpack Compose или рассматривать Jetpack Compose только для новых экранов.

Невозможно легко перенести эспрессо-тесты на основе View в Compose. Кроме того, функция записи эспрессо-теста недоступна для Compose. Однако можно вручную написать Espresso для тестирования Compose.

Да, если у вас есть существующая инфраструктура, вам придется приложить дополнительные усилия, но это логично, поскольку Jetpack Compose — это нечто новое. Но с другой стороны, Jetpack Compose поставляется с собственной поддержкой тестирования, а также с очень хорошей поддержкой предварительного просмотра, так что вы можете легко визуально проверить ваши компоненты с различными состояниями (я часто использую это), и тестирование скриншотов намного проще с Compose.

4. Стабильность и зрелость

Мы вкратце затронули эту тему в разделе «Производительность». Jetpack Compose существует 3 года, он улучшается с каждым релизом, но время от времени могут появляться ошибки. Кроме того, многие функции Compose все еще являются экспериментальными и требуют аннотации для подключения. Использование экспериментальных функций может быть проблематичным для вашего бизнеса.

// Some feature, like modifier, layout and material design are experimental
// and require to OptIn explicitely
@OptIn(ExperimentalMaterialApi::class)
@OptIn(@ExperimentalFoundationApi::class)
@OptIn(ExperimentalComposeUiApi::class)
@OptIn(ExperimentalLayoutApi::class)

Если вам требуется очень высокий уровень зрелости и стабильности, лучше остановиться на системе View.

View намного старше и, по моему опыту, до сих пор имеет больше ошибок. У нас все еще есть несколько нерешенных проблем в нашей комбинации ViewPager и фрагментов. Мы планируем, что однажды мы перенесем эту часть в Compose и избавимся от нее. То, что что-то является экспериментальным, не так уж и плохо: это не значит, что оно нестабильно, обычно это означает, что API будет меняться. Кроме того, в последнем приложении есть очень приятное поведение bottom sheet и небольшие анимации. Я бы не смог реализовать это в те же сроки и так же стабильно, как это происходит сейчас в системе View.

5. Отсутствующие функции

Система View — это часть истории Android. Многие функции Android сначала были доступны в View, а затем перенесены в Compose. Часто Compose может предоставлять только обертку (например, Google Maps). Поэтому вы можете оставить систему View до тех пор, пока эти функции не станут доступны в Compose.
Обратите внимание, что вы можете использовать AndroidView для доступа к этим функциям, доступным только для View, а Compose в конце концов доберется до них.

Я не знаю ни одной недостающей функции. Вы имеете в виду поддержку сторонних библиотек? А Compose был создан для взаимодействия со старой системой View, и Google Maps — отличный пример того, как обертка Compose действительно улучшает работу с представлением Google Maps под капотом, в отличие от MapView и MapFragment (я реализовывал карты Google кучу раз, первый раз более 10 лет назад).

6. Широко используется в существующих приложениях

Скорее всего, вам придется иметь дело с View в своей карьере. Многие крупные компании по-прежнему используют View, даже если они перешли на Jetpack Compose. Перенос View-экранов на Compose может быть сопряжен с высокой ценой и относительно низкой ценностью для конечных клиентов. Большинство компаний предпочитают переходить на Compose постепенно, сохраняя старые пользовательские интерфейсы с помощью системы View. Вам могут понадобиться навыки работы с View, чтобы эффективно перевести Views на Compose.

Да ладно, Compose предлагает отличную поддержку миграции и совместимости. Ничто не достается бесплатно, и никто не заставляет вас мигрировать и нести эти расходы. Но если вы все же хотите мигрировать, вы можете делать это экран за экраном, иногда даже компонент за компонентом. Эти инвестиции означают сокращение сроков будущей разработки: вы можете сэкономить до 50% написанного кода для слоя пользовательского интерфейса. Со временем это будет увеличиваться и становиться еще дешевле.

7. Размер APK

Если важен размер пакета, вам нужно будет отказаться от Jetpack Compose. Он увеличит размер пакета как минимум на несколько мегабайт, но для уменьшения размера можно включить полный режим R8. Однако система View имеет практически нулевое влияние на размер, поскольку компоненты являются частью системы и не требуют дополнительной библиотеки.

Размер APK часто определяется всем остальным, что вы собираете в пакет. Например, плохо оптимизированные ресурсы изображений и некоторые нативные библиотеки обычно намного больше влияют на размер конечного приложения. Кроме того, добавление всех библиотек Jetpack увеличивает размер. Если мы говорим о больших старых проектах, это не оказывает большого влияния. Нам пришлось включить Here-maps в наше приложение, и это добавило 40 МБ за ночь.

8. Совместимость со старыми устройствами

Jetpack Compose обратно совместим вплоть до Android API 21 (Lollipop, Android 5.0). Если вы хотите использовать предыдущие версии Android, вам придется использовать View.

SDK 21 уже около 10 лет. Многие приложения и библиотеки в любом случае больше не поддерживают его. Если вы нацелитесь на SDK 21, вы охватите 99.7% устройств или даже больше, в зависимости от местоположения. Библиотеки Jetpack (androidx) поддерживают минимум SDK 19 и старше на 1 год. В любом случае, поддержка чего-либо ниже SDK 23 повлечет за собой дополнительные расходы, а ниже 21 — это кошмар, особенно из-за отсутствия поддержки материального дизайна.

9. Встраиваемые и IoT-устройства

Устройства, которые служат для одной цели (киоск, платежный терминал, касса самообслуживания), часто работают только с одним приложением и имеют ограниченные ресурсы как процессора, так и оперативной памяти. Jetpack Compose может оказаться слишком тяжелым и потребовать от разработчиков Android использовать систему View, чтобы соответствовать спецификациям устройства.

Кроме того, эти устройства могут работать под управлением старой версии Android, например 4.0.

Это то же самое, что и пункт 8. Compose тоже работает на дерьмовых устройствах, я не уверен, что простое приложение Compose не будет работать там же, где и приложение View. Но да, если у вас суперспецифические устройства и потребности, вы в любом случае окажетесь в худшем положении, чем при использовании основных инструментов и устройств.

10. Вам не хочется изучать что-то новое

Возможно, вы находитесь в конце своей карьеры или хотите перейти в другую сферу, но есть ситуации, когда изучение Jetpack Compose не имеет смысла. Кривая обучения крутая, потому что это очень новый подход к разработке пользовательского интерфейса по сравнению с View. Тем не менее, его изучение может быть полезным, поскольку некоторые принципы используются в других фреймворках, например React и Flutter.

Если это так, то я не думаю, что вы должны быть Android-разработчиком. Если вы так застряли в старом фреймворке View, то Compose должен быть для вас как подарок небес: программировать в Compose — одно удовольствие по сравнению с View. На мой взгляд, хороший разработчик увлечен своей работой: если вы не стремитесь узнать что-то новое и стать лучшим разработчиком (в целом, а не только в Compose), то вы всегда будете в проигрышном положении. Возможно, ваша страсть лежит где-то в другом месте.

Заключение

Jetpack Compose — это отличный набор инструментов пользовательского интерфейса и, безусловно, будущее Android, но это не единственный набор инструментов пользовательского интерфейса, и View демонстрирует отличную работу, хотя некоторые считают его устаревшим. Ппоэтому стоит выбирать то, что соответствует вашим потребностям и ограничениям. Какой бы фреймворк вы ни выбрали, получайте удовольствие! Android-разработка богата и разнообразна, и наша задача как Android-разработчиков — использовать эти преимущества.

Источник

Exit mobile version