Android Study Jams. Ещё митапы
#intro
В начале месяца я рассказывал вам о мероприятии для начинающих разработчиков — Android Study Jams, которое было организовано студенческим сообществом из Саратова и где я был спикером.
Мероприятие прошло хорошо, и у тех, кто хотел побывать на нём, но не смог, есть ещё целых два шанса прикоснуться к разработке под Android.
Первое мероприятие будет сегодня, 17 декабря в 17:30 по МСК. Зарегистрироваться можно тут, а организатором является DSC Брянск ✌️
А если у вас не получится присоединиться сегодня, или останутся вопросы по приложению, то есть шанс задать их завтра, 18 декабря в 18:30 по МСК. Детали тут, а организатором является DSC Воронеж.
Здорово, когда в разных городах создаются новые сообщества и организуются мероприятия, где с нуля можно попробовать технологии.
#intro
В начале месяца я рассказывал вам о мероприятии для начинающих разработчиков — Android Study Jams, которое было организовано студенческим сообществом из Саратова и где я был спикером.
Мероприятие прошло хорошо, и у тех, кто хотел побывать на нём, но не смог, есть ещё целых два шанса прикоснуться к разработке под Android.
Первое мероприятие будет сегодня, 17 декабря в 17:30 по МСК. Зарегистрироваться можно тут, а организатором является DSC Брянск ✌️
А если у вас не получится присоединиться сегодня, или останутся вопросы по приложению, то есть шанс задать их завтра, 18 декабря в 18:30 по МСК. Детали тут, а организатором является DSC Воронеж.
Здорово, когда в разных городах создаются новые сообщества и организуются мероприятия, где с нуля можно попробовать технологии.
Почему Kotlin Synthetics Deprecated?
#kotlin
Несколько месяцев назад Android Kotlin Extensions Gradle плагин был помечен depricated. Он давал нам две классных фичи:
• Synthetics — плагин, который позволяет заменить findViewById;
• Parcelize — плагин, который позволяет создавать Parcelable при помощи одной аннотации, без использования boilerplate.
Parcelize никуда не уходит, а только перемещается в отдельный плагин kotlin-parcelize, а вот Synthetics уходит навсегда. Давайте посмотрим предпосылки, почему это произошло.
Но прежде рассмотрим все существующие подходы для поиска View.
1️⃣findViewById — функция, которая проходит по иерархии View и находит по идентификатору ту, которая необходима.
Имеет ряд существенных недостатоков:
➖метод поиска дорогой и разработчики часто используют этот метод повторно не задумываясь о последствиях производительности;
➖метод не null safe, то есть если в дереве не найдётся View с переданным идентификатором, то будет
➖нет кастования до требуемой View до Android API 26;
➖много boilerplate кода, особенно когда в классе много View.
Есть библиотека Butter Knife, которая заметно уменьшала количество кода, однако и сократила скорость сборки приложения, к тому же не решала ряд проблем. Сейчас она также depricated.
2️⃣Kotlin Synthetics — по сути вызывал описанный выше метод единожды и кэшировал полученные значения.
Из плюсов:
➕нет boilerplate кода, ведь всё что требуется — это настроить плагин в Gradle и использовать идентификаторы прямо из xml-файла;
➕type safety, то есть вам не надо делать никаких кастов.
Но давайте пройдёмся по недостаткам:
➖частично null safe. К счастью, если вы удалите какую-то view из xml, то в коде также будет подсветка удалённой View. Однако, если вы используете несколько конфигурационных файлов, то есть шанс нарваться на
➖загрязнение namespaces. Если вы имеете несколько одинаковых идентификаторов в разных xml-файлах, то есть риск импортировать неверный файл и также получить
➖работает только в Kotlin. Может быть не критичным для тех проектов, который написаны на Kotlin, но критично для тех, у кого есть Java.
Именно из-за описанных недостатков он и был помечен depricated.
Давайте обратимся к альтернативе. ⤵️
3️⃣View Binding — в целом, урощённая версия Data Binding, который по сути «биндится» только для ссылок на View, не связываясь с данными.
Плюсы:
➕нет boilerplate кода;
➕полностью null safe;
➕type safety;
➕нет влияния на build time в отличии от Data Binding;
➕поддерживается как в Java, так и в Kotlin
Отмечу один минус: чуть больше строк кода в сравнении с Kotlin Synthetics, ведь необходимо создать экземпляр переменной binding, которую придётся использовать потом повсюду.
Хотя я и сам очень любил Kotlin Synthetics, и мирился с его недостатками, но теперь придётся переезжать на View Binding. 🤔
Ссылка на документацию по инструменту тут.
#kotlin
Несколько месяцев назад Android Kotlin Extensions Gradle плагин был помечен depricated. Он давал нам две классных фичи:
• Synthetics — плагин, который позволяет заменить findViewById;
• Parcelize — плагин, который позволяет создавать Parcelable при помощи одной аннотации, без использования boilerplate.
Parcelize никуда не уходит, а только перемещается в отдельный плагин kotlin-parcelize, а вот Synthetics уходит навсегда. Давайте посмотрим предпосылки, почему это произошло.
Но прежде рассмотрим все существующие подходы для поиска View.
1️⃣findViewById — функция, которая проходит по иерархии View и находит по идентификатору ту, которая необходима.
Имеет ряд существенных недостатоков:
➖метод поиска дорогой и разработчики часто используют этот метод повторно не задумываясь о последствиях производительности;
➖метод не null safe, то есть если в дереве не найдётся View с переданным идентификатором, то будет
NullPointerException
;➖нет кастования до требуемой View до Android API 26;
➖много boilerplate кода, особенно когда в классе много View.
Есть библиотека Butter Knife, которая заметно уменьшала количество кода, однако и сократила скорость сборки приложения, к тому же не решала ряд проблем. Сейчас она также depricated.
2️⃣Kotlin Synthetics — по сути вызывал описанный выше метод единожды и кэшировал полученные значения.
Из плюсов:
➕нет boilerplate кода, ведь всё что требуется — это настроить плагин в Gradle и использовать идентификаторы прямо из xml-файла;
➕type safety, то есть вам не надо делать никаких кастов.
Но давайте пройдёмся по недостаткам:
➖частично null safe. К счастью, если вы удалите какую-то view из xml, то в коде также будет подсветка удалённой View. Однако, если вы используете несколько конфигурационных файлов, то есть шанс нарваться на
NullPointerException
.➖загрязнение namespaces. Если вы имеете несколько одинаковых идентификаторов в разных xml-файлах, то есть риск импортировать неверный файл и также получить
NullPointerException
.➖работает только в Kotlin. Может быть не критичным для тех проектов, который написаны на Kotlin, но критично для тех, у кого есть Java.
Именно из-за описанных недостатков он и был помечен depricated.
Давайте обратимся к альтернативе. ⤵️
3️⃣View Binding — в целом, урощённая версия Data Binding, который по сути «биндится» только для ссылок на View, не связываясь с данными.
Плюсы:
➕нет boilerplate кода;
➕полностью null safe;
➕type safety;
➕нет влияния на build time в отличии от Data Binding;
➕поддерживается как в Java, так и в Kotlin
Отмечу один минус: чуть больше строк кода в сравнении с Kotlin Synthetics, ведь необходимо создать экземпляр переменной binding, которую придётся использовать потом повсюду.
Хотя я и сам очень любил Kotlin Synthetics, и мирился с его недостатками, но теперь придётся переезжать на View Binding. 🤔
Ссылка на документацию по инструменту тут.
Jetpack Compose — Live coding сессия
#compose #youtube
Друзья, уже сегодня, 21 декабря в 18:30 мы с вами погрузимся в мир Jetpack Compose и создадим рабочее приложение.
По ходу сессии вы сможете задать вопросы нашему гостю Григорьеву Дмитрию, автору канала Jetpack Compose.
Напоминаю, что мы с вами рассмотрим:🔹
🔹как лучше строить архитектуру;
🔹как делать списки из разных типов view;
🔹что делать с навигацией между разными экранами;
🔹как сделать анимации;
🔹что делать с текущими приложениями;
🔹и много другое.
Ссылка на трансляцию тут.
#compose #youtube
Друзья, уже сегодня, 21 декабря в 18:30 мы с вами погрузимся в мир Jetpack Compose и создадим рабочее приложение.
По ходу сессии вы сможете задать вопросы нашему гостю Григорьеву Дмитрию, автору канала Jetpack Compose.
Напоминаю, что мы с вами рассмотрим:🔹
🔹как лучше строить архитектуру;
🔹как делать списки из разных типов view;
🔹что делать с навигацией между разными экранами;
🔹как сделать анимации;
🔹что делать с текущими приложениями;
🔹и много другое.
Ссылка на трансляцию тут.
Быстрая настройка CI/CD для Android при помощи GitLab
#cicd
CI/CD — это инструмент, который позволяет автоматизировать повторяющиеся действия. Например, это может быть прогон тестов или загрузка билда в Slack, Firebase, а также анализ кода. Вариантов множество, но эти самые распространённые.
Даже если вы единственный человек в команде, то вам стоит настроить один раз CI/CD для однотипных действий.
Есть довольно много различных систем, но если вы используете в качестве git-системы GitLab, то можно использовать его систему для этих целей и не платить деньги за ещё один сервис.
Есть полезная статья, которая ответит на начальные вопросы, связанные с настройкой: создание билда, прогон тестов и загрузка в Slack. Выглядит действительно очень просто, поэтому нет смысла не начинать использовать полезный инструмент.🤓
#cicd
CI/CD — это инструмент, который позволяет автоматизировать повторяющиеся действия. Например, это может быть прогон тестов или загрузка билда в Slack, Firebase, а также анализ кода. Вариантов множество, но эти самые распространённые.
Даже если вы единственный человек в команде, то вам стоит настроить один раз CI/CD для однотипных действий.
Есть довольно много различных систем, но если вы используете в качестве git-системы GitLab, то можно использовать его систему для этих целей и не платить деньги за ещё один сервис.
Есть полезная статья, которая ответит на начальные вопросы, связанные с настройкой: создание билда, прогон тестов и загрузка в Slack. Выглядит действительно очень просто, поэтому нет смысла не начинать использовать полезный инструмент.🤓
Quick Guide для миграции приложений на Android 11
#tips
В этом году мы много писали о нововведениях, связанных с Android 11: поддержка 5G, notification chat bubble, notifications priority conversations, scoped storage, package visibility и другие.
Большинство приложений, в целом, готово и будут работать на свежей версии Android, однако стоит посмотреть, не было ли изменений в тех областях, на которые завязано ваше приложение.
Нашёл хороший чеклист, где описываются изменения в работе Android 11.
Тут есть как критичные изменения, такие как: foreground service type, one time permissions или scoped storage, или незначительные, например плавный показ клавиатуры в приложении или notification bubbles.
Детальнее можно почитать тут и быть уверенным, что приложение полностью готово к новой системе. 👌🏻
#tips
В этом году мы много писали о нововведениях, связанных с Android 11: поддержка 5G, notification chat bubble, notifications priority conversations, scoped storage, package visibility и другие.
Большинство приложений, в целом, готово и будут работать на свежей версии Android, однако стоит посмотреть, не было ли изменений в тех областях, на которые завязано ваше приложение.
Нашёл хороший чеклист, где описываются изменения в работе Android 11.
Тут есть как критичные изменения, такие как: foreground service type, one time permissions или scoped storage, или незначительные, например плавный показ клавиатуры в приложении или notification bubbles.
Детальнее можно почитать тут и быть уверенным, что приложение полностью готово к новой системе. 👌🏻
Прокачиваем Logcat в Android Studio
#tips
Android Studio имеет огромный набор инструментов, которыми мы не пользуемся. А некоторыми из них пользуемся так же, как они настроены по умолчанию, без тонкой надстройки для себя. К такому инструменту может относиться один из самых распространённых — Logcat.
Вот как его можно настроить:
1️⃣ Цветовая схема. Мы можем показать 5 различных типов сообщений в зависимости от их важности. По умолчанию все они выводятся белым и отличаются только префиксом в начале сообщения. Можно улучшить читаемость, настроив цвет текста для каждого типа. Для этого надо выбрать File > Settings > Editor > Colors Scheme > Android Logcat. Несколько хороших цветовых схем, одной из которых пользуюсь я тут.
2️⃣Формат вывода. По умолчанию, каждое сообщение содержит следующую информацию: дата и время, идентификатор процесса, package name, tag и сообщение. Часто нам не нужно столько информации, поэтому это также легко можно настроить и вывести только необходимую.
3️⃣Расположение Logcat. Изначально панель с логами выводится в самом низу, что в целом удобно для большинства разработчиков. Но если у вас широкий монитор, или их несколько, вы можете показывать эту панель в любом удобном месте, таким образом расширив окно для ввода кода.
Подробнее о настройках можно почитать тут.
#tips
Android Studio имеет огромный набор инструментов, которыми мы не пользуемся. А некоторыми из них пользуемся так же, как они настроены по умолчанию, без тонкой надстройки для себя. К такому инструменту может относиться один из самых распространённых — Logcat.
Вот как его можно настроить:
1️⃣ Цветовая схема. Мы можем показать 5 различных типов сообщений в зависимости от их важности. По умолчанию все они выводятся белым и отличаются только префиксом в начале сообщения. Можно улучшить читаемость, настроив цвет текста для каждого типа. Для этого надо выбрать File > Settings > Editor > Colors Scheme > Android Logcat. Несколько хороших цветовых схем, одной из которых пользуюсь я тут.
2️⃣Формат вывода. По умолчанию, каждое сообщение содержит следующую информацию: дата и время, идентификатор процесса, package name, tag и сообщение. Часто нам не нужно столько информации, поэтому это также легко можно настроить и вывести только необходимую.
3️⃣Расположение Logcat. Изначально панель с логами выводится в самом низу, что в целом удобно для большинства разработчиков. Но если у вас широкий монитор, или их несколько, вы можете показывать эту панель в любом удобном месте, таким образом расширив окно для ввода кода.
Подробнее о настройках можно почитать тут.
Ресурсы с иконками
#tips
Сегодня поделюсь с вами пачкой ресурсов, которые использую, если мне необходимы красивые иконки для приложения. Они могут понадобиться, если вы работаете над pet-проектом или не хотите ждать, когда ваш дизайнер нарисует иконку... 🙄
▪️Material Design Google — этот ресурс содержит множество иконок в стиле Material от Google. Главной фишкой является несколько стилей одной и той же иконки: filled, outlined, rounded two-tone и sharp. Примерный аналог можно найти, используя набор иконок, встроенный в Android Studio, но тут их больше.
▪️Material Design Icons — ресурс является альтернативной первому ресурсу, но главной фишкой тут является наличие иконок от сторонних дизайнеров, которые часто выглядят гораздо круче, чем стоковые.
▪️Feather Icons — хороший ресурс с набором outlined иконок, где главная фишка — настройка ширины обводки этой самой иконки.
▪️Boxicons — ещё один ресурс с набором нестандартных иконок: например, логотипами компаний. Их тут относительно немного, но может помочь, если нужна подобная иконка.
▪️IBM Icons — набор иконок от IBM, где также можно найти любопытные иконки. Большинство из них выглядят не в Material стиле, но радует их большое разнообразие.
#tips
Сегодня поделюсь с вами пачкой ресурсов, которые использую, если мне необходимы красивые иконки для приложения. Они могут понадобиться, если вы работаете над pet-проектом или не хотите ждать, когда ваш дизайнер нарисует иконку... 🙄
▪️Material Design Google — этот ресурс содержит множество иконок в стиле Material от Google. Главной фишкой является несколько стилей одной и той же иконки: filled, outlined, rounded two-tone и sharp. Примерный аналог можно найти, используя набор иконок, встроенный в Android Studio, но тут их больше.
▪️Material Design Icons — ресурс является альтернативной первому ресурсу, но главной фишкой тут является наличие иконок от сторонних дизайнеров, которые часто выглядят гораздо круче, чем стоковые.
▪️Feather Icons — хороший ресурс с набором outlined иконок, где главная фишка — настройка ширины обводки этой самой иконки.
▪️Boxicons — ещё один ресурс с набором нестандартных иконок: например, логотипами компаний. Их тут относительно немного, но может помочь, если нужна подобная иконка.
▪️IBM Icons — набор иконок от IBM, где также можно найти любопытные иконки. Большинство из них выглядят не в Material стиле, но радует их большое разнообразие.
Touch Event Management
#subscribers
Тут @Vel_daN, один из подписчиков канала, написал отличную статью о взаимодействии с touch event. Мы не так часто используем эти функции напрямую и переопределяем этих слушателей у себя, однако это может быть полезно, если нужно взаимодействовать с несколькими View сразу.
В статье рассматривается пример открытия бокового меню при наличии на экране
У автора, кстати, много интересных статей про
Также мы многое обсуждаем в чате канала. Например, автору можно задавать свои вопросы и, возможно, они послужат идеями для следующих статей 😉.
#subscribers
Тут @Vel_daN, один из подписчиков канала, написал отличную статью о взаимодействии с touch event. Мы не так часто используем эти функции напрямую и переопределяем этих слушателей у себя, однако это может быть полезно, если нужно взаимодействовать с несколькими View сразу.
В статье рассматривается пример открытия бокового меню при наличии на экране
RecyclerView
: это кажется довольно простой задачей, однако если мы хотим сделать открытие этого меню из середины экрана при заполненном списке, то получаются проблемы, связанные с перехватом событий touch.У автора, кстати, много интересных статей про
MotionLayout
, а недавно появилась статья про работу с ConstraintLayout
из кода.Также мы многое обсуждаем в чате канала. Например, автору можно задавать свои вопросы и, возможно, они послужат идеями для следующих статей 😉.
Новый год 2021 🎄
Вот и подходит к концу 2020 год 🥳 Для многих он оказался непростым: самоизоляция, резкий переход на удалёнку, пандемия, отсутствие путешествий, да и общая обстановка была не очень позитивная. 🙄
Но он заканчивается, и я надеюсь, что будущий год принесёт больше позитива в нашу жизнь. Желаю всем нам набраться сил на этих каникулах, а потом заряженными и настроенными на позитив решить все сложные и интересные задачи, а также легко править can’t reproduce баги. 🤓
Спасибо вам, мои подписчики за то, что читаете канал и даёте обратную связь. Меня это заряжает делать новый контент и делиться им с вами.
До новых встреч в 2021 году 💥
@al_gorshkov
Вот и подходит к концу 2020 год 🥳 Для многих он оказался непростым: самоизоляция, резкий переход на удалёнку, пандемия, отсутствие путешествий, да и общая обстановка была не очень позитивная. 🙄
Но он заканчивается, и я надеюсь, что будущий год принесёт больше позитива в нашу жизнь. Желаю всем нам набраться сил на этих каникулах, а потом заряженными и настроенными на позитив решить все сложные и интересные задачи, а также легко править can’t reproduce баги. 🤓
Спасибо вам, мои подписчики за то, что читаете канал и даёте обратную связь. Меня это заряжает делать новый контент и делиться им с вами.
До новых встреч в 2021 году 💥
@al_gorshkov
Набор статей для разработчиков
#subscribers #compose
Тут @unniked поделился ссылкой на репозиторий, где сохраняет полезные статьи для Android-разработчиков.
Всё разделяется на несколько разделов: Java, Kotlin, UI, Architecture, Jetpack, NDK и многие другие. Статей много и каждый, вне зависимости от уровня знаний, найдет для себя что почитать. 🤓
Ну и отдельно автор выделяет всеми нами ожидаемый Jetpack Compose, где также собрано множество статей для любого уровня.
У многих сейчас неделя выходных, и это может быть отличной возможностью подтянуть свои знания по Android. ✌🏻
#subscribers #compose
Тут @unniked поделился ссылкой на репозиторий, где сохраняет полезные статьи для Android-разработчиков.
Всё разделяется на несколько разделов: Java, Kotlin, UI, Architecture, Jetpack, NDK и многие другие. Статей много и каждый, вне зависимости от уровня знаний, найдет для себя что почитать. 🤓
Ну и отдельно автор выделяет всеми нами ожидаемый Jetpack Compose, где также собрано множество статей для любого уровня.
У многих сейчас неделя выходных, и это может быть отличной возможностью подтянуть свои знания по Android. ✌🏻
Где разработчики зарабатывают больше
#sites
Есть классный ресурс, о котором узнал только сегодня — это сервис Levels.fyi, который собирает актуальную информацию о зарплатах IT-специалистов.
Во-первых, можно узнать об уровнях разработчиков в известных компаниях. Не все знают, что уровни разработчиков — это не только стандартные Junior-Middle-Senior.
Во-вторых, множество удобных фильтров: по городу и стране, тегам, вакансии и т.д.
В-третьих, огромная база компаний и разделение зарплат на обычную зарплату, годовой бонус и акции, что также радует.
В целом, сервис больше ориентирован на зарубежный рынок, хотя и наши компании тоже встречаются. 🙃
#sites
Есть классный ресурс, о котором узнал только сегодня — это сервис Levels.fyi, который собирает актуальную информацию о зарплатах IT-специалистов.
Во-первых, можно узнать об уровнях разработчиков в известных компаниях. Не все знают, что уровни разработчиков — это не только стандартные Junior-Middle-Senior.
Во-вторых, множество удобных фильтров: по городу и стране, тегам, вакансии и т.д.
В-третьих, огромная база компаний и разделение зарплат на обычную зарплату, годовой бонус и акции, что также радует.
В целом, сервис больше ориентирован на зарубежный рынок, хотя и наши компании тоже встречаются. 🙃
SQLite FTS в Room
#room
Одной из самых нераспространённых, но полезных фич Room является FTS поиск.
FTS или full-text search — это функция, которая позволяет делать поиск по тексту при помощи созданной виртуальной таблицы.
Самым простым решением является использования оператора
Виртуальные таблицы позволяют значительно увеличить скорость выполнения подобных запросов. Если в приложении много SQL-запросов с
Всё что нужно — это использовать аннотацию
А также немного изменить написанных запрос, убрав из него
Немного подробнее можно почитать в двух статьях: тут и тут.
#room
Одной из самых нераспространённых, но полезных фич Room является FTS поиск.
FTS или full-text search — это функция, которая позволяет делать поиск по тексту при помощи созданной виртуальной таблицы.
Самым простым решением является использования оператора
LIKE
. Но есть проблема — это скорость при выполнении запроса. По сути, этот оператор проходит по всей таблице и находит те данные, что соответствуют запросу. Виртуальные таблицы позволяют значительно увеличить скорость выполнения подобных запросов. Если в приложении много SQL-запросов с
LIKE
, то стоит присмотреться к этому решению.Всё что нужно — это использовать аннотацию
@Fts4
с указанием родительской таблицы:@Fts4(contentEntity = Route::class)
@Entity(tableName = "routesFts")
class RoutesFts(val id: String, val title: String)
А также немного изменить написанных запрос, убрав из него
LIKE
: @Dao
abstract class RouteFtsDao {
@Query("SELECT * FROM route JOIN routesFts ON route.id == routesFts.id WHERE routesFts.title MATCH :text GROUP BY route.id" )
abstract fun routesWithText(text: String): List<Route>
}
Немного подробнее можно почитать в двух статьях: тут и тут.
Custom View с нуля
#view #optimizations
При создании сложного UI компонента, у вас есть несколько способов для того, чтобы достичь результата: кастомизировать стандартный компонент, найти подходящую библиотеку или написать компонент с нуля.
Последний способ является наиболее сложным, однако добавляет одно весомое преимущество — возможность кастомизации и гибкости. Другие способы дают гораздо меньший процент кастомизации. 🤔
Сегодня, нашёл цикл статей, где автор создаёт кастомный график с нуля. При этом объясняя все фазы отрисовки: на какие методы стоит обратить внимание, какой жизненный цикл у
Статья будет полезна тем, кто не так часто пишет кастомные
Ссылки на статьи первую, вторую и третью части статьи.
Ну и конечно, с Рождеством, друзья! 😉✨
#view #optimizations
При создании сложного UI компонента, у вас есть несколько способов для того, чтобы достичь результата: кастомизировать стандартный компонент, найти подходящую библиотеку или написать компонент с нуля.
Последний способ является наиболее сложным, однако добавляет одно весомое преимущество — возможность кастомизации и гибкости. Другие способы дают гораздо меньший процент кастомизации. 🤔
Сегодня, нашёл цикл статей, где автор создаёт кастомный график с нуля. При этом объясняя все фазы отрисовки: на какие методы стоит обратить внимание, какой жизненный цикл у
View
, как использовать Profiler для оптимизации отрисовки и многое другое. Статья будет полезна тем, кто не так часто пишет кастомные
View
, но хочет сильнее погрузиться в эту интересую тему.Ссылки на статьи первую, вторую и третью части статьи.
Ну и конечно, с Рождеством, друзья! 😉✨
Showkase: визуализация Jetpack Compose
#compose #library
Jetpack Compose имеет как минимум одно важное преимущество перед традиционным императивным подходом: переиспользование компонентов.
Но, при этом добавляется ряд проблем:
1️⃣ Разработчики добавляют новые компоненты, которые со временем тяжело визуализировать.
2️⃣ Сложная навигация по сохранённым компонентам, что может привести к дублированию похожих элементов.
3️⃣ Аналогичные проблемы связаны и с другими частями UI: шрифты, цвета, иконки.
Хорошим решением проблем является использование дизайн системы в виде дерева компонентов, которое показывает текущую визуальную структуру проекта.✌️
Для Jetpack Compose уже есть библиотека, которая делает всю работу за разработчика: Showkase. По сути она генерирует
Почитать подробнее про использование можно тут, а ссылка на библиотеку тут.
#compose #library
Jetpack Compose имеет как минимум одно важное преимущество перед традиционным императивным подходом: переиспользование компонентов.
Но, при этом добавляется ряд проблем:
1️⃣ Разработчики добавляют новые компоненты, которые со временем тяжело визуализировать.
2️⃣ Сложная навигация по сохранённым компонентам, что может привести к дублированию похожих элементов.
3️⃣ Аналогичные проблемы связаны и с другими частями UI: шрифты, цвета, иконки.
Хорошим решением проблем является использование дизайн системы в виде дерева компонентов, которое показывает текущую визуальную структуру проекта.✌️
Для Jetpack Compose уже есть библиотека, которая делает всю работу за разработчика: Showkase. По сути она генерирует
Activity
со всеми Composable-функциями, где есть аннотация Preview. Также есть функции для цветов и шрифтов. Почитать подробнее про использование можно тут, а ссылка на библиотеку тут.
Ошибки при модуляризации приложения
#architecture
При разделении приложения на несколько модулей есть шанс допустить ошибку, когда мы распределяем код на модули.
Например, можно распределять код по слоям:
Более правильным подходом является разделение кода на фичи: каждая часть приложения становится независимой друг от друга и связность становится минимальной.
Автор статьи рассказывает об этой ошибке у себя в проекте и даёт несколько советов, связанных с переходом на feature-first модуляризацию.
#architecture
При разделении приложения на несколько модулей есть шанс допустить ошибку, когда мы распределяем код на модули.
Например, можно распределять код по слоям:
:networking
, :persistence
или :models
. Но со временем подобные модули превращаются в несколько монолитов, и разработчики возвращаются к той же самой проблеме... 🙄Более правильным подходом является разделение кода на фичи: каждая часть приложения становится независимой друг от друга и связность становится минимальной.
Автор статьи рассказывает об этой ошибке у себя в проекте и даёт несколько советов, связанных с переходом на feature-first модуляризацию.
Разновидности commit()
#interview #intro
При использовании
По логике, должно быть достаточно только первого метода, но на практике их 4.
Для чего нужны все эти методы и чем они отличаются?
Это распространённый вопрос на собеседованиях, да и при повседневном кодинге подобная информация может быть важной. Давайте рассмотрим подробнее.
🔸
При вызове
🔸
При вызове
При вызове
В итоге получаем такую картину: если нужно выполнять транзакции синхронно и без добавления в back stack, то стоит использовать
Почитать подробнее про использование методов можно в этой статье.
#interview #intro
При использовании
Fragment
есть 4 способа совершить транзакцию: commit()
, commitAllowingStateLoss()
, commitNow()
, commitNowAllowingStateLoss()
. По логике, должно быть достаточно только первого метода, но на практике их 4.
Для чего нужны все эти методы и чем они отличаются?
Это распространённый вопрос на собеседованиях, да и при повседневном кодинге подобная информация может быть важной. Давайте рассмотрим подробнее.
🔸
commit()
vs commitAllowingStateLoss()
. Иногда при использовании Fragment
или DialogFragment
можно столкнуться с ошибкой can’t perform a commit after onSaveInstanceState(). Детальная статья об этой ошибке тут, а главный недостаток этого бага в том, что его не так просто отловить при разработке и он легко может проявиться в проде.commit()
и commitAllowingStateLoss()
почти одинаковы в своей работе за исключением одного: при вызове commit FragmentManager
проверяет, сохранил ли он своё состояние или нет. Если сохранил, то появляется эта ошибка. При вызове
commitAllowingStateLoss()
вы не получите ошибку, однако FragmentManager
может потерять своё состояние, и, соответственно, других фрагментов, добавленных после метода onSaveInstanceState()
.🔸
commit()
vs commitNow()
. Другая альтернатива использования commit влияет на время выполнения транзакции. При вызове
commit()
транзакция не совершается мгновенно: она планируется в главном потоке и выполняется только тогда, когда этот поток готов к выполнению. На практике это даёт возможность выполнять любое число транзакций, но следует помнить, что они не выполнятся сразу. При вызове
commitNow()
транзакция выполняется в тот же момент: если вызвать несколько транзакций, то все другие будут ожидать, пока первая не завершит своё выполнение. Стоит знать, что документация предостерегает не использовать этот метод, если вам нужно добавлять фрагмент в back stack.В итоге получаем такую картину: если нужно выполнять транзакции синхронно и без добавления в back stack, то стоит использовать
commitNow()
. Если же транзакций несколько и важно добавлять их в back stack, то commit()
. При возникновении ошибки стоит постараться выяснить причину её появления, и если победить её не удаётся, то лучше использовать методы с префиксом AllowingStateLoss.Почитать подробнее про использование методов можно в этой статье.
Keyboard Transitions с MotionLayout
#view
Сегодня мне попалась интересная статья, рассказывающая о некоторых фичах при работе с
В первой части автор рассматривает работу с анимацией клавиатуры, которая появилась в Android 11.
По сути, главная задача — это связать
И конечно, отдельно рассматривается работа и на более низких версиях Android (да, 11 версия сейчас далеко не у всех пользователей).
Ссылка на статью тут.
#view
Сегодня мне попалась интересная статья, рассказывающая о некоторых фичах при работе с
Instets
. В первой части автор рассматривает работу с анимацией клавиатуры, которая появилась в Android 11.
По сути, главная задача — это связать
MotionLayout
и Instets
при помощи WindowInsetsAnimation.Callback
. И конечно, отдельно рассматривается работа и на более низких версиях Android (да, 11 версия сейчас далеко не у всех пользователей).
Ссылка на статью тут.
Удалёнка зарубежом
#stream #youtube
Одним из «трендов» ушедшего года можно назвать удалённую работу. Многие компании, которые никогда не нанимали удалённых сотрудников сейчас охотно это делают, а разработчики, которым по душе был офис привыкают к новым правилам... 🙄
Тем не менее, вопросов остаётся много, особенно если вы хотите работать удалённо с зарубежной компанией.
Давайте вместе погрузимся в тему удалёнки и поговорим о ней с разработчиком, который последние 3 года работает на зарубежные компании — Артур Бадретдинов.
Сейчас Артур является Android Team Lead в компании Squire Technologies, а за свою удалённую карьеру посетил 24 страны!🤯
Как найти такую работу, как платить налоги, как привыкнуть к разнице в часовых поясах, какие особенности в менталитете есть при работе? Эти и другие вопросы мы обсудим на YouTube канале Android Live во вторник, 26 января в 18:30.
А ещё, вы можете задать интересующие вас вопросы в форме.
Ссылка на трансляцию тут. До встречи! 😉
#stream #youtube
Одним из «трендов» ушедшего года можно назвать удалённую работу. Многие компании, которые никогда не нанимали удалённых сотрудников сейчас охотно это делают, а разработчики, которым по душе был офис привыкают к новым правилам... 🙄
Тем не менее, вопросов остаётся много, особенно если вы хотите работать удалённо с зарубежной компанией.
Давайте вместе погрузимся в тему удалёнки и поговорим о ней с разработчиком, который последние 3 года работает на зарубежные компании — Артур Бадретдинов.
Сейчас Артур является Android Team Lead в компании Squire Technologies, а за свою удалённую карьеру посетил 24 страны!🤯
Как найти такую работу, как платить налоги, как привыкнуть к разнице в часовых поясах, какие особенности в менталитете есть при работе? Эти и другие вопросы мы обсудим на YouTube канале Android Live во вторник, 26 января в 18:30.
А ещё, вы можете задать интересующие вас вопросы в форме.
Ссылка на трансляцию тут. До встречи! 😉
На чём писать код для Android?
#benchmark
Скорость разработки напрямую зависит от машины, на которой установлена среда разработки: ведь с повышением сложности проекта растёт и время его сборки, а чем шустрее работает машина, тем больше кода мы можем написать.
Да и опытные разработчики не по наслышке знают, как много Android Studio съедает ресурсов. 🙄
Выбрать компьютер для разработки не так просто: обзоры обычно не рассказывают про разработчиков, а статьи часто не дают полной картины.
Сегодня в одном из чатов наткнулся на репозиторий с тестовым проектом при помощи которого можно понять, на сколько шустро ваш компьютер справляется со сборкой проекта. Это не только поможет вам с выбором нового устройства в будущем, но и даст возможность проверить, насколько ваш текущий компьютер хорош относительно других.
Ссылка на репозиторий тут, там же и инструкция по тестированию своей машины. А тут можно почитать уже финальные результаты и решить для себя, что же прикупить для улучшения качества своей работы.
#benchmark
Скорость разработки напрямую зависит от машины, на которой установлена среда разработки: ведь с повышением сложности проекта растёт и время его сборки, а чем шустрее работает машина, тем больше кода мы можем написать.
Да и опытные разработчики не по наслышке знают, как много Android Studio съедает ресурсов. 🙄
Выбрать компьютер для разработки не так просто: обзоры обычно не рассказывают про разработчиков, а статьи часто не дают полной картины.
Сегодня в одном из чатов наткнулся на репозиторий с тестовым проектом при помощи которого можно понять, на сколько шустро ваш компьютер справляется со сборкой проекта. Это не только поможет вам с выбором нового устройства в будущем, но и даст возможность проверить, насколько ваш текущий компьютер хорош относительно других.
Ссылка на репозиторий тут, там же и инструкция по тестированию своей машины. А тут можно почитать уже финальные результаты и решить для себя, что же прикупить для улучшения качества своей работы.
А на какой операционной системе вы работаете?
Anonymous Poll
48%
Windows
35%
Mac OS
17%
Linux
0%
Другое (сообщите в ЛС)