Изучение разработки под Android

Jetpack Compose: будущее пользовательского интерфейса Android

Android прошел долгий путь, и Jetpack Compose продолжает расти

Недавно я изучил, как Android прогрессировал в том, как код взаимодействует с пользовательским интерфейсом (View) на протяжении многих лет. Многое произошло за последние несколько лет ... и, наконец, это приземляется с Jetpack Composes.

Конечно, возникает вопрос - это просто шумиха или надолго? Стоит ли начинать изучать это или просто ждать следующего настоящего мессии?

Я считаю, что даже если Jetpack Compose не будет окончательным способом взаимодействия Android с пользовательским интерфейсом, это определенно будет путь вперед.

Вот почему ...

Заставить XML работать с кодом никогда не было идеально.

С первого дня XML - это способ определения пользовательского интерфейса приложения.

Маленький печально известный findViewById, где каждая итерация пытается избавиться от его использования, начиная с ButterKnife, затем Kotlin Synthetics и DataBinding, а в последнее время - ViewBinding.



С годами ситуация улучшилась, но подход XML все еще несовершенен. Логика пользовательского интерфейса лучше всего работает с использованием Kotlin, чем XML, поэтому создается два отдельных элемента пользовательского интерфейса, которые Google все еще пытается согласовать.

Есть даже попытка переместить модальное окно из кода в XML в функции DataBinding.

Тем не менее, слишком много шаблонного кода для поддержки. Переносить больше вещей в XML нежелательно.

Код XML + никогда не будет идеальным.

Jetpack Compose, с другой стороны, устраняет необходимость в XML и заменяет его полным кодом Kotlin для пользовательского интерфейса.

Теперь с Jetpack Compose код пользовательского интерфейса и логика могут оставаться внутри себя, полностью отделенными от других частей логики.

А недавно Крис Бэйнс исследовал преобразование приложения из XML в полностью Jetpack Compose, он показал улучшение как размера файла APK, так и времени сборки! 🤩



Архитектурная дилемма: деятельность - это представление или нет?

Когда Android был впервые представлен, не было архитектуры, рекомендованной Google. Некоторые люди кодировали все в Activity. Это плохо, так как делает код спагетти.

Само сообщество развивается, и наиболее распространенным подходом становится MVP (Model View Presenter).

Тем не менее, это очень сбивает с толку, что такое Activity.

  • Действие рассматривается как представление, поскольку оно напрямую связано с представлением (XML) и иногда содержит логику пользовательского интерфейса).
  • Деятельность осознает жизненный цикл, кажется центром контроля всего. (хотя в идеале ведущий должен иметь больше контроля)

Чтобы решить эту проблему, в 2017 году Google разработал компонент архитектуры. Это замечательно, поскольку теперь Google предоставляет структуру, которую он полностью поддерживает, - структуру MVVM (Model-View-ViewModel).

В нем одним из наиболее важных элементов (кроме ViewModel) является компонент LiveData и Live-Cycle Aware. Это начало смещать часть понимания жизненного цикла с Activity на ViewModel.



Тем не менее, он все еще несовершенен, поскольку Activity по-прежнему является ключом для восстановления состояния и внедрения зависимостей.

Начиная с 2020 года, упомянутая выше проблема восстановления состояния и внедрения зависимостей решается с помощью SaveStateHandle и Dagger Hilt.



Понятно, что Google пытается перенести ядро ​​разработки с Activity на ViewModel.

Тем не менее, Activity по-прежнему связана с пользовательским интерфейсом XML. Некоторая часть логики пользовательского интерфейса все еще находится в Activity.

Чтобы полностью исключить необходимость в Activity для управления каким-либо кодом пользовательского интерфейса и просто быть проводником, представлен Jetpack Compose.

Весь код пользовательского интерфейса теперь находится в составных функциях. ViewModel и Activity больше не нуждаются в доступе к отдельному элементу пользовательского интерфейса для обновления.

Ему просто нужно обновить переменную состояния, и пользовательский интерфейс будет автоматически перекомпонован. Чтобы понять, как работает перекомпоновка, ознакомьтесь с приведенным ниже.



Activity теперь свободна от всей логики пользовательского интерфейса, а также от необходимости доступа к конкретному элементу пользовательского интерфейса для обновления. Он просто должен быть связующим звеном между ViewModel и компонуемыми функциями.

Декларативный пользовательский интерфейс: промышленная тенденция в Интернете и приложениях

Декларативный пользовательский интерфейс - это не новая вещь, которую только что представил Android Jetpack Compose. На самом деле, нативные версии Android появляются относительно поздно.

В веб-мире программирование на React существует давно, и оно относительно приветствуется и популярно. Мир приложений пытается имитировать успех: у нас есть React Native, представленный Facebook, и недавно Flutter от Google.

Они достигли определенного уровня успеха, иногда из-за того, что они пытаются поддерживать как мир iOS, так и Android с одной целью. Тем не менее, он по-прежнему относительно популярен, и попытки заставить их работать в приложении все еще продолжаются.

На рынке есть много веб-разработчиков, которые уже знакомы с фреймворком. Это позволит легко расширить такую ​​структуру разработки для более широкого сообщества.

В мире приложений для сообщества iOS всегда обсуждаются подходы к программированию пользовательского интерфейса на основе Storyboard и InterfaceBuilder. Сгенерированный код нечитаем и трудно рецензировать. Также существует библиотека под названием SnapKit, которая делает программирование кода пользовательского интерфейса более доступным непосредственно в Swift.

Без колебаний Apple впервые представила своему сообществу декларативный пользовательский интерфейс, то есть SwiftUI, начиная с iOS 13.0. Теперь они стали достойными производства, и мы действительно видим, что эта тенденция растет, что вызывает большой интерес в сообществе.

Google также быстро отреагировал, объявив о том, что Jetpack Compose опередил свою готовность во время Google IO 2019. Альфа-версия была выпущена, а теперь выпущена бета-версия. Похоже, что в 2021 году он выйдет на достойное производство.

Что мне нравится в Jetpack Compose по сравнению со SwiftUI, так это то, что он снизился до степени базового управления API рисования из него. Используя Jetpack Compose, я могу программировать пользовательские представления, такие как Приложение для рисования, Простая анимация часов и даже Игра Flappy Bird.

Это выглядит действительно многообещающе. Это проверенная рабочая среда пользовательского интерфейса, которую индустрия приняла в веб-мире, и мир приложений (как для iOS, так и для Android) движется к ней. Он должен остаться.

Jetpack Compose… должен оставаться и расти

Мне ясно, что с рождением Jetpack Compose

  • Google удалось устранить проприетарный подход к разработке XML, который имеет так много ограничений, которые Google пытался решить в прошлом.
  • Представлена ​​гораздо более четкая архитектура UI vs Logic в соответствии с архитектурным компонентом, который разработал Google, и освобождает Activity от всей нагрузки на пользовательский интерфейс.
  • Сейчас он принимает промышленный стандарт парадигмы разработки пользовательского интерфейса. Теперь у него может появиться больше сообществ разработчиков, то есть Сообщество веб-интерфейса, чтобы присоединиться к удовольствию разработки под Android.

Пока Google сможет предоставить стабильную версию Jetpack Compose для производства, нет никаких сомнений в том, что это будет будущее Android-разработки.

Бонусный балл, вам не нужно будет беспокоиться о том, следует ли мне больше использовать Fragment или Activity. Фрагмент тоже может исчезнуть 😜