Общие и новые лучшие практики и рекомендации, которые должен знать каждый разработчик Android в 2023 году

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

Java умер, да здравствует Котлин

Если вы действительно не знаете, прошло несколько лет с тех пор, как Google объявил, что разработка Android будет в первую очередь Kotlin. Kotlin не только безопаснее, лучше спроектирован и менее многословен, чем Java, но без Kotlin в вашей кодовой базе вы не сможете использовать современные инструменты и библиотеки, такие как Jetpack Compose, или асинхронное программирование с использованием Coroutines.
Перейдите на Kotlin если вы еще этого не сделали!

Реактивный ранец

Jetpack Compose — это рекомендуемый современный набор инструментов Android для создания собственного пользовательского интерфейса. Он достаточно зрелый и позволяет создавать пользовательский интерфейс проще, быстрее и с меньшим количеством кода. Более того, макеты XML на основе Compose и View можно комбинировать. Вы можете добавить пользовательский интерфейс Compose в существующее приложение, использующее дизайн на основе представлений, или включить иерархию Android View в пользовательский интерфейс Compose. Этот подход особенно полезен, если вы хотите использовать элементы пользовательского интерфейса, которые еще не доступны в Compose, например AdView или MediaPlayer. Когда вы начинаете новый проект, больше нет причин использовать макеты XML.

Котлин Корутины

Асинхронное или неблокирующее программирование — важная часть разработки под Android. Вам приходится иметь дело с асинхронными вещами каждый раз, когда вы хотите выполнять операции ввода-вывода или обширные вычисления. Kotlin гибко решает эту проблему, предоставляя поддержку сопрограмм на уровне языка и делегируя большую часть функциональности библиотекам. Больше нет необходимости самостоятельно реализовывать логику потока или запускать AsyncTasks. Если вы найдете учебник, где используются такие вещи, будьте уверены, что он очень старый.

Асинхронный поток

В асинхронных потоках нет ничего нового. Вы можете быть знакомы с такими библиотеками, как RxJava/RxAndroid, которые реализуют асинхронное программирование с наблюдаемыми потоками. Однако этот API слишком сложен для большинства случаев использования, и кривая обучения очень крутая. У меня были проекты, в которых Rx-потоки были связаны настолько сложным образом, что внесение простых изменений занимало дни, а не минуты. К счастью, у нас уже есть Kotlin Flow, новая библиотека асинхронных потоков от JetBrains, компании, разработавшей язык Kotlin. Имея много общего с потоками Rx, Kotlin Flow построен на основе Kotlin Coroutines. Он реализует многие хорошо известные операторы, которые вы, возможно, знаете из мира Rx, и упрощает работу с асинхронными потоками. Прекратите использовать RxJava и полюбите Flow!

Архитектура приложения

Проектирование архитектуры приложения — важный фактор, обеспечивающий надежность, тестируемость и удобство обслуживания ваших приложений. Google не всегда был очень уверен в архитектуре приложений. К счастью, это изменилось, и теперь у нас есть официальное руководство по архитектуре приложений. В руководстве обсуждаются такие понятия, как разделение задач, разные уровни приложений, модульность или внедрение зависимостей. Прочтите все руководство, прежде чем писать хоть одну строчку кода!

Материальный дизайн

Ваш код должен быть чистым, но для пользовательского интерфейса это вдвойне верно, поскольку он виден пользователю. Нелегко сделать приложение красивым и функциональным одновременно. К счастью, у нас есть Материальный дизайн, система дизайна, созданная и поддерживаемая дизайнерами и разработчиками Google. Material Design предоставляет множество компонентов, макетов, анимации и значков, готовых к использованию как есть или настроенных в соответствии с вашими потребностями. Пользователи уже знакомы с такими элементами, как плавающая кнопка действия или панель навигации, поэтому нет причин изобретать разные способы выполнения одних и тех же действий. Также не забудьте сообщить своей команде дизайнеров, что приложение для Android не должно выглядеть как точная копия приложения для iOS!

Пользовательский опыт

Мобильные устройства имеют определенные ограничения, такие как маленькое пространство на экране, ограниченная производительность, емкость аккумулятора или нестабильное подключение к Интернету. Основываясь на этих ограничениях, я могу дать вам несколько советов о том, что следует иметь в виду. Например:

  • Приложение должно иметь возможность выполнять все основные функции или их часть без доступа к Интернету.
  • Приложение должно сохранять свое состояние и пользовательский ввод. Система Android может убить ваше приложение в любое время. Пользователи обычно не хотят дважды писать длинные сообщения в чат, потому что они поворачивают экран или переключаются между приложениями.
  • Приложение должно четко отображать свое состояние. Пользователи должны видеть, когда была нажата кнопка, загружается ли файл или произошла какая-то ошибка.
  • Мобильный экран маленький, уберите отвлекающие факторы, сосредоточьтесь на одном деле за раз и делайте это хорошо. Разделите многоэтапные процессы на большее количество экранов.

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

Пример приложения

Я работаю над небольшим проектом с открытым исходным кодом, в котором собираюсь внедрить упомянутые лучшие практики.

Вы можете найти его здесь: https://github.com/jurajkusnier/stock-browser

Само приложение очень простое. Он загружает рыночные данные из нескольких сторонних API и сохраняет их в локальной базе данных. Затем он позволяет пользователям искать, просматривать и отмечать избранные элементы.

Приложение использует архитектурный паттерн MVI (Model View Intent), реализованный с использованием библиотеки Orbit-MVI. Каждый экран имеет соответствующие ViewModel и ScreenState. ViewModel представляет собой источник правды для экрана. Он обрабатывает все вводимые пользователем данные и возвращает соответствующее состояние пользовательского интерфейса, отображаемое на экране. В дополнение к состоянию ViewModel также может создавать побочные эффекты, используемые в основном для навигации между экранами. ViewModel вызывает различные варианты использования, чтобы данные отображались пользователю. Логика загрузки и сохранения данных из разных ресурсов реализуется репозиториями и источниками данных.

Спасибо, что прочитали. Если вам понравилась эта статья, ставьте палец вверх, оставляйте отзывы и делитесь ею с друзьями. Удачного кодирования!