Size: a a a

Android Live 🤖

2020 August 26
Android Live 🤖
​​Как писать быстрые layouts
#разработка #статьи

Каким-бы функциональным и красивым не было приложение, мало кто из разработчиков хотел бы получить отзывы о том, что приложение работает медленно на устройстве пользователя.
Порой не просто сделать своё приложение «летающим» на всех устройствах, так как даже интерфейс системы работает с лагами на некоторых девайсах.

Но всё равно нужно держать в голове следующий момент: большинство устройсв сегодня имеют частоту обновления экрана в 60 fps, то есть на отрисовку одного кадра у нас есть 1/60 ≈ 16 миллисекунд. Для того, чтобы добиться этого результата у нас есть несколько инструментов и советов.

1) Используйте средства для диагностики проблем с layouts: Layout Inspector, Systrace, Android Profiler. Каждая из них достойна отдельного поста, поэтому пока только ссылки в документации.

2) Переиспользование layouts с merge.
Вынесение layout в xml и использование его при помощи include — довольно распространённая практика. Однако, многие забывают, что вместо корневого layout можно написать merge, который уберёт лишний уровень вложенности.

3) Используйте подходящий родительский layout.
Для этого пользуйтесь следующим правилом: для сложной верстки — ConstraintLayout, для вертикальных или горизонтальных последовательных элементов — LinearLayout, для расположения элементов одного над другим — FrameLayout.

4) Используйте ViewStub.
ViewStub — это хорошая альтернатива, когда вам нужно показать тяжёлый layout на экране или сделать этот показ отложенным. Он быстро рендерится и легко применяется, поэтому не забывайте про этот инструмент.

Подробнее про эти советы можно почитать тут.
источник
Android Live 🤖
​​Jetpack Compose теперь в Alpha
#разработка #опрос

Сегодня вышла Alpha версия фреимворка Jetpack Compose.
Финальную версию обещают к 2021 году, ну а пока у нас есть:

🔹анимации;
🔹поддержка Constraint Layout;
🔹жесты;
🔹совместимость с текущими проектами и View;
🔹preview в Android Studio;
🔹и другие изменения.

Обновление довольно глобальное, с нетерпением жду beta версию. 😎
Примеры приложений уже есть тут, знаменитый Sunflower и новый для меня Tivi.

Подробнее про изменения можно почитать тут.

Ждёте Jetpack Compose?
источник
2020 August 31
Android Live 🤖
​​Constraint Layout 2.0
#разработка #статьи #конференции

Constraint Layout — один из самых популярных компонентов Jetpack. И не зря: это отличный способ построения сложной вёрстки, причём для этого можно использовать только встроенный редактор (хотя иногда удобнее пописать код).

Совсем недавно ConstraintLayout 2.0 перешёл в релизную стадию, и теперь его можно смело затягивать в проект. Давайте же поговорим, что там появилось нового в отличии от первой версии.

🔹Flow — это «виртуальный» layout, который позволяет соединять view в цепочки, которые могут переходить на следующую строку при недостатке места. Очень полезная штука, особенно когда вы не знаете, насколько широкими и разными будут компоненты у вас на экране, но вам обязательно нужно показать их все. Так как это виртуальный layout, то он не добавляет новых view в иерархию, а просто содержит в себе несколько свойств для перечисленных ссылок на view. Почитать побольше об этом компоненте можно тут

🔹Layer — это так же «виртуальный» layout, который позволяет применять какие-то трансформации для view сразу для всей группы. Например, если вы хотите применить анимацию перемещения для большого числа view, то можно просто перечислить их в отдельный layer и применить анимацию только для layer.

🔹Motion Layout — наверное, одна из самых ожидаемых фич. Он позволяет создавать фактически любые анимации довольно простым и удобным способом благодяря встроенному в Android Studio редактору.

В одном пункте об этой фиче не расскажешь, но тут очень кстати ребята из Android Academy Minsk организуют митап, который рассказывает про Motion Layout и как его применять.
Пройдёт он 3 сентября в 19:00 по МСК. На митапе мы узнаем что такое MotionLayout и какие проблемы он может решать, изучим базовые вещи для анимаций а также пошагово в конце получим готовый экран Логина/Регистрации. Ссылка на регистрацию тут, а само мероприятие онлайн и бесплатно.

А почитать чуть-чуть больше об описанных изменениях можно в этой статье.
источник
Android Live 🤖
Ещё немного о Jetpack Compose
#конференции

Ребята из Android Academy Global организуют митап, который посвящён теме Jetpach Compose. Доклады довольно крутые, учитывая свежесть технологии:

1) Jetpack Compose and MVI — Артур Бадретдинов, Squire Technologies. Доклад будет о том, как связать паттерн MVI и свежий Jetpack Compose. Посмотрим на примеры реализации и как это будет работать в связке.

2) Easing In and Out with Jetpack Compose — Артем Нестеренко, Loóna Inc. Новый подход даёт нам возможность легче создавать анимации. Также посмотрим на примеры кода и узнаем, каково же это писать анимации в декларативном стиле.

Мероприятие будет уже завтра, 01.09.2020 в 19:00, оно будет онлайн и бесплатно.
Ссылка на регистрацию тут, а ссылка на YouTube прилетит прям перед началом😎.
источник
Android Live 🤖
​​Kotlin Multiplatform Mobile теперь в Alpha
#разработка

Сегодня команда JetBrains анонсировала альфа версию Kotlin Multiplatform Mobile! Это SDK, который позволяет писать бизнес-логику приложений сразу под 2 платформы. 👍🏻 Альфа версия включает в себя также и плагин для Android Studio, который позволяет писать такие проекты.

Уже есть примеры приложений, которые использовали у себя KMM:

Quizlet мигрировали бизнес-слой с JavaScript на KMM и значительно улучшили производительность как Android, так и iOS приложений;

Fastwork начали использовать KMM для шаринга бизнес-логики и API для нескольких команд разработки;

Yandex.Disk начали экспериментировать с небольшой фичи, после чего переписали всю синхронизацию данных на KMM.

Больше информации и полный текст анонса можно почитать тут.

Что-то конец лета выдал нам кучу новинок и теперь не знаешь даже, за что ухватиться в первую очередь 😄
источник
2020 September 02
Android Live 🤖
​​Зачем использовать Material Design тему?
#разработка #статьи

Любое Android-приложение соседствует с множеством других установленных приложений. Именно поэтому одним из принципов Material Design — это: «Все приложения должны иметь схожее поведение в рамках одной операционной системы».

Чтобы этого достичь, Google рекомендует использовать Material Design Components. Кроме этого, есть MaterialComponents Theme для приложения.

Давайте рассмотрим, почему вам стоит использовать именно её вместо AppCompat или стандартной библиотеки.

1️⃣Поддержка большего числа компонентов. MDC даёт довольно большое количество стандартных компонентов для показа, а также «расширяет» возможности текущих.
Например, MaterialButton предлагает гораздо больше стандартных стилей, чем обычный Button.

2️⃣Material Theming — это способ, который позволяет правильно кастомизировать приложение конкретно под ваш дизайн.
При помощи MDC можно настраивать цвета, тип шрифта, форму для приложения и использовать их при помощи атрибутов.

3️⃣Темная тема. Поддержка тёмной темы — это распространённая фича в приложении.
MDC позволяет настраивать этот паттерн из коробки, учитывая настройки пользователя в системе.

4️⃣Material Motion. MDC предлагает целый раздел о том, как должны быть устроены переходы между экранами. Их не очень сложно применить в проект, но при этом само приложение выглядит гораздо живее.

5️⃣Jetpack Compose. Уже не в первый, и далеко не в последний раз мы будем говорим об этом новом фреимворке. MDC уже готовит свою кодовую базу для перехода с Compose в будущем, что существенно ускорит миграцию нам.

В целом, переход на Material Theme довольно прост и даёт преимущества. На него стоит перейти только ради стилей для стандартных виджетов, которые особенно круто выглядят на последних версиях Android.

Подробнее про эти преимущества можно почитать в этой статье.
источник
2020 September 09
Android Live 🤖
​​Уменьшение времени старта приложения с I/O prefetching
#разработка #статьи

Сегодня состоялся релиз Android 11, и мне бы хотелось рассмотреть одну из фич, которая может неплохо улучшить время старта приложения — IORap.

Разработчики обещают уменьшение времени старта приложения, как минимум 5%, на большом числе устройств, хотя некоторые из наблюдаемых приложений показывали улучшения более, чем на 25%.

IORap работает как независимый сервис на устройстве и пытается предугадать, какие IO сервисы будут необходимы на устройстве. И если раньше они вызывались в тот момент, когда были нужны приложению, то теперь они будут браться из pagecache, улучшая время старта приложения.

Ребята подсчитали, что 80% популярных приложений из Google Play проводят больше 10% времени старта, блокируя I/O во время запуска, поэтому от этой фичи пользу получитат довольно многие приложения.

Подробнее о том, как работает OIRap можно почитать тут.
источник
2020 September 10
Android Live 🤖
​​Как использовать Jetpack DataStore?
#разработка #статьи #опрос

С появлением Jetpack у нас появилось довольно много библиотек, делающих жизнь разработчиков проще. Думаю, что для многих не секрет, что недавно Google представили ещё одну крутую библиотеку — DataStore, которая призвана заменить старый добрый SharedPreferences, имеющий недостатки.

DataStore предлагает асинхронный API для работы с данными, в то время как SharedPreferences даёт такую возможность только при помощи listeners;
DataStore безопасно вызывать в UI-потоке, так как под капотом он использует Dispatchers.IO
DataStore лучше работает с Runtime Exceptions, в то время как SharedPreferences могут вызывать ошибки при парсинге, которые сложнее поймать;
• есть API для миграции с SharedPreferences;
• работают на основе Coroutines и Flow из коробки.

В общем, это довольно мощная библиотека, которую вскоре будут использовать большинство приложений. 🤓
Ну а если ваше приложение может использовать alpha-версии библиотек, то у вас уже есть возможность попробовать эту библиотеку.

Хорошая статья с пошаговым руководством тут.

Как вам библиотека? На мой взгляд, получилось довольно круто.
источник
2020 September 12
Android Live 🤖
​​С днем программиста, друзья!

Время мчится, за окном осень и приходит наш профессиональный праздник 🤗.
Сегодня 256 день в году, 12 сентября, и уже несколько лет именно в этот день отмечается день программиста.

Желаю всем нам крутых проектов, интересных задач, профессионального и личностного роста. А завтрашний день лучше используйте, чтобы провести его в теплом круге друзей, а не сидя за IDE.👨‍💻

Хорошего вам Дня программиста и выходных!
источник
2020 September 14
Android Live 🤖
​​Лимит уведомлений от одного приложения
#разработка #статьи

Задумывались ли вы, есть ли ограничение на максимальное количество уведомлений от одного приложения? Если попытаться найти какие-то упоминания об этом в документации, то там не будет какой-то внятной информации об этом. Однако, такой лимит существует.

Автор статьи провёл исследование и пришёл к выводу, что количество уведомлений от одного приложения контролируется производителем смартфонов.
Например, у Google Pixel 3A максимальное количество уведомлений равно 25, а у OnePlus 6T или Samsung  — 50.

Вы можете подумать: но ведь 25 уведомлений — это много, что уж говорить про 50. Но если ваше приложение завязано на уведомлениях (например мессенджер), то такое ограничение может привести к некорректной работе приложения, и тем более сервисов.

Так что рекомендую проверить своё приложение, если оно может выводить такое количество уведомлений пользователю.
источник
2020 September 17
Android Live 🤖
​​Не используйте LiveData в репозиториях
#разработка #статьи

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

Но если изучить подобный проект, то можно заметить большое количество блокировок главного потока, так как observer из LiveData всегда вызывается в нём. Поэтому, хорошей практикой будет использовать её именно на слое, который связан с отображением данных.

Альтернативой LiveData будет использование Flow, который имеет больше контроля над местом, где он исполняется. Подробнее об этом можно почитать тут.
источник
2020 September 20
Android Live 🤖
​​WorkManager. Базовая информация
#разработка #новичкам

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

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

Первая даёт базовые основы использования WorkManager: какие зависимости добавить, какие есть типы операций и параметры для них.

Вторая описывает работу с WorkManager чуть дальше и рассказывает о цепочках запросов, прогрессе, статусе операции и как завершить текущую работу.
источник
2020 September 21
Android Live 🤖
Жизнь разработчика в Израиле
#интервью #экспаты

Друзья, первая статья из новой рубрики на канале готова.

Она получилась объёмной и рассматривает большинство вопросов жизни в Израиле и отвечает на те вопросы, которые вы задавали: как найти работу, какая там зарплата, насколько легко получить визу и гражданство, как хорошо развита медицина и быт в целом.
Была проделана огромная работа, и я надеюсь, что вам понравится статья.😎

Ссылка на статью тут, обязательно ставьте лайки (их можно поставить не один раз, а аж 50😁) !

Ещё приятный момент. Я долго размышлял, нужен ли каналу чат, и понял, что он не будет лишним, ведь в нём мы сможем обсуждать всё, что происходит на канале, в частности подобные статьи (их можно обсудить там же с героем).
Поэтому, если у вас останутся вопросы к Андрею (герою статьи), то вы можете задать их в @android_live_chat, а самыми интересными я дополню статью.😏

Давайте сделаем наш чатик уютным и интересным!
источник
2020 September 22
Android Live 🤖
​​Paging3
#jetpack #чтонового

Совсем недавно появилась, так называемая, третья версия Paging-библиотеки, созданная для улучшения загрузки данных по частям и отображения их в списках.

Текущая версия — 3.0.0-alpha03.

Что нового?
🔸полностью написана на Kotlin;
🔸поддерживает Coroutines и Flow из коробки, как и RxJava с LiveData;
🔸кэширует данные в памяти, чтобы помочь в распределении системных ресурсов и загрузки данных без задержек;
🔸улучшенный адаптер для RecyclerView;
🔸встроенная поддержка обработок ошибок, повторных запросов и обновлений.

Подробнее
Ссылка на статью с примерами использования тут.
Пример codelab с Paging3 тут.
источник
Android Live 🤖
​​Mobius 2020
#конференции

Думаю, что большинству разработчиков известна конференция Mobius. Напомню, что это крутая техническая конференция, целиком посвящённая мобильной разработке. Ну и доклады от экспертов, которые из первых рук делятся своими наработками со всеми.

В этом году конференция стала online и пройдёт с 11 по 14 ноября. Нас ждёт: 4 дня эфира, несколько треков, около 20 докладов, воркшопы и Q&A-сессии.

Для подписчиков канала ребята дают скидку на билеты из категории Personal в 1500 рублей: AndroidLive2020aupc.

Программа потихоньку заполняется, и сейчас самое время купить билеты по более низкой цене. Ссылка с информацией тут.
источник
2020 September 28
Android Live 🤖
​​Как оптимизировать RecyclerView?
#комментарии #recyclerview

Ни для кого не секрет, что сегодня RecyclerView — это базовый элемент для показа списков в приложениях. И очень важно, чтобы он работал максимально плавно.

Автор статьи предлагает следующие оптимизации:

🔸использование библиотек для загрузки изображений. Garbage collector мог бы быть причиной неотвечающего UI, если бы не bitmap pool, который встроен в большинство современных библиотек для загрузки изображений. Думаю, что мало кто сегодня пытается самостоятельно управлять показом изображений вручную, поэтому продолжайте делегировать все задачи, связанные с загрузкой изображений специальным библиотекам.

🔸установите ширину и высоту для ImageView. Очень часто изображения, получаемые с сервера имеют динамические параметры ширины и высоты. Если мы показываем изображения без учёта этих параметров, то при полной загрузке можем получить «мигание» интерфейса. Чтобы этого избежать, попробуйте вычислить ширину и высоту или соотношение сторон заранее, до загрузки картинки.

🔸оптимизируйте метод onBindViewHolder. Проверьте метод onBindViewHolder и сделайте его максимально легким. Это также даст прирост к производительности RecyclerView

🔸используйте DiffUtil. При обновлении адаптера старайтесь использовать DiffUtil. Под капотом он использует методы для изменения элементов по позициям, а не полное обновление списка (notifyDataSetChanged). Кстати, если хотите ещё больше оптимизировать свой список, попробуйте использовать асинхронный DiffUtil на coroutines. Ссылка с деталями тут.

🔸избегайте вложенных view. Довольно базовое правило, нарушение которого становится ещё более критичным в RecyclerView. Добавлю, что тут важно следить за layout, которые использут веса для отрисовки.

🔸используйте setHasFixedSize. Если элементы вашего RecyclerView имеют одинаковые параметры ширины и высоты, то эта функция улучшит производительность списка.

🔸переиспользуйте RecyclerViewPool. Довольно хорошей оптимизацией является переиспользование RecyclerViewPool при наличии одинаковых элементов. Пример можно посмотреть в статье.

🔸поэкспериментируйте с setItemViewCacheSize.  Из документации следует, что этот параметр устанавливает количество ViewHolder, которые не показаны на экране перед добавлением их в RecyclerViewPool. Мы можем поэкспериментировать с этим параметром, чтобы увеличить количество ViewHolder, невидимых на экране и уменьшить количество вызовов onBindViewHolder.

А что вы бы ещё добавили к этому списку?
источник
2020 September 29
Android Live 🤖
​​Podlodka Android Crew — 2 сезон
#конференции

Летом ребята из Podlodka делали двухнедельную онлайн конференцию для Android-разработчиков. И вот, уже через неделю начинается второй сезон Podlodka Android Crew!

Что нас ждёт:
🌟 парное программирование от Дениса Неклюдова и Степана Гончарова;
💰доклад о том, как из мобильного разработчика вырасти в СТО;
🔥собеседование наоборот: теперь будут собеседовать не людей с конференции, а экспертов, которые там присутствуют;
☕️куча сессий и, конечно же, холиваров.

Начало конференции — 5 октября. До четверга, цена билета — 3400 рублей, что весьма демократично, учитывая количество контента. Подробнее о программе и билетах тут.

И снова, у вас, подписчиков Android Live, есть шанс выиграть билет бесплатно. Для этого не нужно никуда подписываться: просто оставь свой ник в форме до 1 октября 18:00. В этот же день будет розыгрыш одного билета.

До встречи на конференции!
источник
2020 September 30
Android Live 🤖
​​Room и связь Many to Many
#room

На мой взгляд, одна из самых неудобных вещей, которая есть в Room — это работа со связью Many to Many.

Для тех, кто не использовал эту связь в Room, я расскажу вкратце. Больше деталей можно почитать тут.
Для её создания в Room есть следующий механизм:
🔸создаётся ассоциативная таблица с идентификаторами первой и второй таблицы;
🔸создаётся новый data-класс, где прописывается связь через Junction, указывая эту таблицу в качестве связи.

По идее, все довольно просто, но главная сложность возникает в фильтрации данных. В документации показан пример с получением полного списка данных, но если её нужно сделать, то единственный вариант — использование @RawQuery вместо @Query и генерирования запроса вручную.
Для такой связи нужно будет создать INNER JOIN по ассоциативной таблице, и дальше применить нужные фильтры.

Главный недостаток тут — отсутствие проверки правильности запроса во время компиляции, поэтому будьте особенно внимательны при его составлении.
источник
2020 October 01
Android Live 🤖
​​Результаты конкурса Podlodka Android Crew — 2 сезон
#конкурс

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

В конкурсе приняло участие 43 человека, при помощи генератора случайных чисел был выбран победитель — @xebastjanova, с чем я её поздравляю! 🎊

Видео с выбором победителя тут. Обязательно участвуйте в новых конкурсах!
источник
2020 October 02
Android Live 🤖
Поиск работы, оптимизация резюме. Взгляд со стороны HR
#конференции

Каждый из разработчиков рано или поздно задумывается о смене работы. Мы готовимся к собеседованиям, учим алгоритмы, но забываем о том, что прежде всего видят рекрутеры — резюме. У многих даже нет хорошо оформленного CV! 😩

В сообществе GDG Bryansk в это воскресенье, 4 октября будет митап, посвящённый поиску работы и оптимизации резюме со стороны HR.

Поликарпов Дмитрий, наш спикер, занимается подбором людей в IT с 2013 года и расскажет нам о поиске работы и ошибках в резюме соискателей.

Запись митапа будет. Тех, кто будет на мероприятии онлайн, ждет сюрприз 🎊, о котором вы узнаете в начале митапа.

Ссылка на трансляцию тут, а больше деталей можно узнать тут.

До встречи на митапе!😎
источник