Android Live 🤖 – Telegram
Android Live 🤖
5.29K subscribers
52 photos
1 video
800 links
Самые свежие новости, новинки и тренды Android от практикующего разработчика.


Автор: @al_gorshkov,
Чат: @android_live_chat
Личный блог: @al_gorshkov_blog

Рекламу не размещаю
Download Telegram
​​Кстати, сегодня и завтра я участвую в конференции TeamLead Conf 2020.
Поэтому, если вам интересно узнать, кто пишет все эти посты, то пишите боту, чтобы найтись и пообщаться.
​​Использование ViewStub в Fragment
#разработка #статьи #комментарии

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

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

Для того, чтобы убрать задержки ещё больше, можно использовать такой инструмент как ViewStub. Это компонент, который поможет проициализировать View не при создании Fragment, а позже, когда понадобится разработчику.

Информация о том, как работает компонент и как применить его в своих приложениях, можно прочитать в этой статье.

Используете ли вы ViewStub в своих приложениях? И как ещё можно увеличить скорость открытия экранов?
​​Kaspresso 1.1.0
#разработка #библиотека

На канале уже рассказывал про библиотеку Kaspresso, которая значительно улучшает написание UI-тестов.
Радует, что ребята не стоят на месте и вышла версия библиотеки 1.1.0, которая привнесла много нового.

Главным нововведением является улучшенный UI Automator, который называется теперь Kautomator. При помощи него написание тестов стало ещё быстрее и удобнее. В описании релиза можно посмотреть сравнение скорости работы стандартного UI Automator и Kautomator. Результат впечатляет.

Кроме этого:
• тестирование обновлений приложения;
• проверка логов, которая поможет соблюсти GDPR, если ваше приложение работает в Европе;
• улучшения в BaseTestCase и BaseTestContext;
• новые примеры и улучшения в документации.

В общем, написание UI-тестов становится с каждым разом всё удобнее и удобнее. Удачи команде в написании такой крутой библиотеки!
​​Первая работа Android-разработчиком. Как найти?
#вопрос #комментарии

Недавно получил вопрос от подписчика:
Привет! Какие основные вопросы могут задать джуну на собеседовании? И как найти первую работу?

Сегодня хочу поделиться своим опытом в этом вопросе и возможно задать кому-то из вас вектор движения.
1) Сделайте небольшое приложение.
Я устраивался на свою первую работу сразу после университета, и моя дипломная работа была связана с написанием приложения под мобильные телефоны. Тогда это казалось чем-то новым и совсем нераспространённым, так как большинство выпускников делали сайты.

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

Поэтому, если вы только начинаете свой путь в мир Android-разработки — начните с написания приложения, ведь практика наше все.

2) Знайте ответы на базовые вопросы.
Так как ваше резюме почти пустое (почти, потому что у вас есть уже как минимум одно приложение из первого пункта), то вас будут спрашивать по базовым вопросам.

Я бы отнес к ним: структуры данных, ООП, SOLID, модификаторы доступа, коллекции. Плюсом будет, если вы сможете написать простую сортировку, а также если сможете оценивать сложности алгоритмов.

По Android вопросы будут связаны с базовыми компонентами: что такое Activity, Fragment, Service и т.д. Хотя, тематика вопросов во многом зависит от компании.

3) Посмотрите в сторону стажировки или практики.
Если вы студент технического вуза, то хорошей «удочкой» для поиска новой работы может служить практика в компании. Многие студенты ей пренебрегают и используют её для сдачи «хвостов» или отдыха.

Однако, если вы всерьёз хотите быть разработчиком, то попробуйте найти IT-компанию в своём городе и напроситься к ним на практику. Очень часто компании соглашаются на это, и у вас появляется отличная возможность посмотреть на будни разработки, получить бесценный опыт от более скилованных коллег, а также проявить себя в решении каких-то простых задач. Умных студентов часто берут на работу.

Если же вы уже не студент, то попробуйте найти стажировку или курс в какой-нибудь IT-компании. Работать придётся очень много, но если вы достаточно мотивированы, то это будет отличной практикой и стартом для вашей будущей карьеры.

4) Не отчаивайтесь, если вашу кандидатуру отклонили.
Обязательно просите отзыв об интервью, уточняйте причину по которой вас не хотят брать. Часто это адекватный фидбек, который поможет вам в следующих интервью.

Кроме того, спросите, когда можно попробовать пройти собеседование повторно. Чаще всего компании дают перерыв в полгода.

А как вы нашли свою первую работу? Какие советы дадите новичкам? Будет здорово, если расскажите об этом в комментариях.
​​Android 11 Developer Preview
#новости

Вчера официально вышел свежий Android 11 для разработчиков. Если вы обладатель Pixel 2, 3, 3a или 4, то сможете установить её себе и посмотреть, как себя ведёт ваше приложение в сочетании с новыми фичами.
Так как это Developer Preview версия, то не стоит её устанавливать на телефон, который вы используете ежедневно.

Из новых фич:
• улучшения в API для работы с 5G;
• улучшения в поддержке экранов с вырезами и новых форм-факторов телефонов (так что ещё больше обращаем внимание на insets в своём приложении);
• поддержка Bubbles API для чатиков с избранными контактами (подробнее тут)
• вставка изображений при быстром ответе из уведомлений;
• улучшения в поддержке машинного обучения на устройстве;
• one-time permissions (наверное, одно из самых важных обновлений, подробнее тут;
• расширения в поддержке биометрии и безопасных хранилищах данных;
• системный post-call screen, где можно после завершения звонка пометить телефон как спам или добавить номер в контакты;
• крутая штука для тестирования изменений разных версий targetSdkVersion (подробнее тут.

Если хотите узнать подробнее про эти и другие измения, которые ожидают пользователей и разработчиков в Android 11, то вам сюда.
​​Противостояние DI фреимворков
#статьи #разработка #опрос

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

В статье описывается 4 самых популярных фреимворка, которые запускаются на JVM: Dagger, Koin, Kodein и Toothpick. На примере очень простого приложения, статья показывает, как сделать одни и те же действия, используя разные библиотеки.

Жаль, что не проводилось сравнение фреимворков по производительности, и эти результаты были взяты с сайта создателей фреимворка. Более-менее независимое тестирование производительности фреимворков, нашёл тут.

А какой ваш выбор? Что нравится использовать в своих приложениях больше всего?
​​Типы связей в Room
#разработка #статьи

Одной из самых важных вещей в проектировании базы данных, является правильное разделение данных по таблицам, а также настройка их связей.
Начиная с версии 2.2, Room поддерживает все типы связей: один-к-одному, один-ко-многим и многие-ко-многим, при помощи только одной аннотации — Relation.

Крутая статья, которая описывает на примере собак и владельцев то, как использовать эти связи в приложении тут.

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

Ещё обратите своё внимание на конец статьи, где описываются расширенные варианты использования связей. Это поможет значительно ускорить получение данных из БД и сделает этот процесс более осознанным.
​​Шпаргалка по функциям Kotlin
#разработка #новичкам

При помощи Kotlin мы можем писать красивый и лаконичный код. Все знают, что сейчас рекомендуемым языком для разработки под Android является Kotlin, и чаще всего нет смысла писать новый проект на Java.

Но разработчики, особенно новички или те, кто перешёл в Kotlin с Java, могут запутаться в тех ключевых словах, которые есть в Kotlin и не использовать всех фишек языка.

Попалась отличная статья, которая на простых примерах описывает основные ключевые слова в функциях Kotlin: Default Arguments, Named Arguments, Infix, Varargs, Tail Recursive, Extension, High Order, Operator Overloading, Lambda.

Даже если вы уже давно пишите под Kotlin, то проверьте, знаете ли вы всё то, что описано в статье.
​​5 распространенных ошибок при использовании Architecture Components
#статьи #разработка

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

Для того, чтобы избежать проблем при использовании Architecture Components, есть отличные рекомендации и топ самых распространённых ошибок при использовании ViewModel и LiveData.

Рекомендую пройтись по ним и проверить, не допускаете ли вы какие-то из этих ошибок.
​​Пример архитектуры Android приложения
#разработка #новичкам

Процесс создания приложений под Android за последние пару лет значительно изменился. Главная заслуга — это Kotlin и Jetpack, которые серьезно улучшили и определили, как должны выглядеть современные приложения.
У Google также есть guide о том, с чего начать создание нового приложения и построение архитектуры.

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

В этой статье мне особенно понравилось то, как рассказывается о применении многомодульной архитектуры. Думаю, что не стоит её слепо применять ко всем проектам (как и любой инструмент), но эта статья — неплохой пример такой архитектуры.
​​Room 🔗 Flow
#разработка #статьи

В своём текущем проекте, я активно использую Room в качестве базы данных. И радует то, как хорошо интегрируется Room с уже существующими решениями.

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

Недавно узнал о ещё двух возможностях Room.

Во-первых, начиная с версии 2.1, можно использовать suspend функции в DAO, что гарантирует работу не в UI-потоке, а также отлично пересекается в Coroutines и другими suspend-функциями. Больше информации тут

Во-вторых, это поддержка Flow. По аналогии с LiveData вы получаете только актуальные данные из базы данных, а плюсом к этому все плюшки от Flow. Подробнее про использование тут.
​​Как связать Timber и Crashlytics?
#разработка #статьи #опрос

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

Ну и каждый разработчик мобильных приложений знаком с Crashlytics. Тут также доступна настройка логирования в дебажных и релизных билдах.

В своих проектах я использую обе библиотекию. А недавно попался отличный вариант того, как связать их и вывести логирование на новый уровень.
Дело в том, что Timber позволяет создать кастомное дерево для обработки ошибок. И всё что вам нужно — это прописать логирование в Crashlytics здесь, в одном месте. Автор статьи предлагает также добавлять сюда и другие способы для логирования. Поэтому, если вам нужно отправлять какие-то данные на сервер в случае ошибок, то вы также можете сделать этот тут.

Кстати, а вы используете ли вы Timber в проектах?
Исследование отечественных команд мобильной разработки, 2020

Егор Толстой проводит ежегодное исследование, связанное с мобильной разработкой. Уделите 5-10 минут на участие в нём, а о результатах вы узнаете позже, здесь на этом канале.

Кстати, Android Live в списке одного из вопросов, буду благодарен, если выберите там и его😉
​​Material Motion System
#статьи #дизайн

Мало кто знает, что команда Google, занимающаяся разработкой Material-дизайна выкатила новое приложение, которое использует набор паттернов для перехода из одного элемента в другой — Material Motion System. Эта система включает в себя подходы того, как делать анимации между Activity, Fragment, View и переходы между разными состояниями.

Документация для разработчиков доступна на Android и Flutter. Стоит также почитать и о базовых принципах Material-анимаций и как они помогают пользователю взаимодействовать с приложением.

Кроме этого, есть другой пример приложения, автор которого вдохновился Material Motion System, описанным выше. Сам репозиторий с примером тут, а подробная статья с описанием приложения и тех анимаций, которые использовались в нём тут.

Лично мне нравится читать про приложения, в которых используются красивые анимации, ведь это вдохновляет применять их и в своих проектах.
​​WindowInsets в Android 11
#разработка #статьи

Работа с клавиатурой на Android всегда было не самым простым делом.
Даже, казалось бы, простое действие с определением присутствия клавиатуры на экране делается через костыли, например через ViewTreeObserver, или через сторонние библиотеки, которые также работают не во всех случаях.

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

Подробнее об этой фиче можно прочитать в этой статье. Конечно, сейчас эта функциональность на этапе разработки и код может поменяться в будущем. Но даже то, как выглядит API сейчас можно сказать, что свежий Android существенно облегчит нам жизнь в работе с клавиатурой и сделает приложения ещё более плавными.
​​Gesture Navigation
#разработка #статьи #опрос

В недавнем посте мы рассматривали такую важную вещь как Insets. Эта тема непосредственно связана с Gesture Navigation, которая появилась в Android 10.

Вообще, эта версия Android даёт возможность пользователям использовать вместо стандартной навигации ещё и навигацию жестами: возвращение назад, возвращение на экран Home и вызов голосового помощника.

Для нас, как для разработчиков добавилось несколько новых штук, а именно:
• поддержка edge-to-edge — то есть приложение должно занимать всю доступную площадь экрана. Это значит, что нужно учиться правильно обрабатывать челки и вырезы;
• обработка визуальных пересечений с системным интерфейсом — например, с нижними элементами управления;
• обработка конфликтов при использовании жестов, свайпов и т.д. с системным интерфейсом.

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

А вы уже приспособили своё приложение под Android 10?
​​Нужно ли тестовое задание?
#комментарии #мысли #опрос

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

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

Но все плюсы может перевесить один существенный минус, с которым я часто сталкивался при поиске сильных кандидатов.
Больше всего времени на создание тестовых заданий готовы тратить молодые и свободные специалисты. У senior разработчика чаще бывают вещи, требующие его внимания: своя семья, pet-проекты, кот, собака и т.д. Чаще у него нет времени, например несколько свободных вечеров или выходных, чтобы потратить его на ваше тестовое задание. И он откажется от вашей вакансии несмотря на то, что, теоретически, хотел бы работать у вас.

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

Как же без тестового оценить кандидата? Я считаю, что самый лучший вариант — поговорить о его проектах, и о тех технологиях, которые он там применял. И даже если там совершенно другой стек, то для сильного кандидата не проблема изучить документацию и успешно начать применять эти знания на практике.
Также важно держать баланс и «копать» в сторону того, что кандидат знает и умеет, а не в сторону «затопить» разработчика странными вопросами, которые можно нагуглить за пару минут или тех, которые не имеют практической пользы.

А как считаете вы, можно ли обойтись без тестового задания? Пишите своё мнение в комментариях
​​Друзья, а давайте разнообразим контент на канале и проведём небольшой #конкурс, связанный с разработкой?

В этот понедельник, завтра, 30 марта, в 18:00, будет пост с задачей. Её нужно будет решить в течении 48 часов с момента размещения поста. Это будет небольшая задача, в одну функцию.

Своё решение можно отправить на Java или Kotlin. Учитывайте, что языки будут оцениваться вместе.

В этот раз нашим партнёром является издательство «Манн, Иванов и Фербер». У них есть свой канал в Telegram, где они описывают новинки, а также классные книги, в том числе и для разработчиков.

Призкнига «Визуализируйте работу. Как выявить расхитителей времени и оптимизировать процессы» Доминики Деграндис. Уверен, что она будет полезна любому человеку, связанному с IT.

Поэтому, следите за каналом и не упустите возможность выиграть полезную вещь.
​​Задача «KitKat-подарок на День рождения»
#конкурс

Итак, для участия в конкурсе, необходимо решить следующую задачу:

Аня очень любит KitKat, и у неё недавно появилась фабрика, которая делает KitKat. Также у неё есть друг Лёша, которому она, без сомнения, подарит свой любимый батончик. Но с некоторыми условиями.

Плитка KitKat — это последовательность целых чисел — C длиной N. И Аня решает подарить непрерывную часть этой шоколадки Лёше так, чтобы длина этого сегмента соответствовала месяцу рождения Леши (M), а сумма целых чисел на квадратах была равно его дню рождения (D).

Вам нужно завершить функцию func, которая возвращает число способов, которыми Аня может разделить её плитку KitKat.

Входные данные
N — длина KitKat;
C — последовательность чисел, то есть плитка KitKat;
D — день рождения;
M — месяц рождения.

Выходные данные
Целое число способов, которыми можно разделить плитку шоколада.

Ограничения
1 <= N <=100
1 <= Ci <=5, 0 <= i < N
1 <= D <= 31
1 <= M <= 12

Пример входных данных
5
1 2 1 3 2
3 2

Пример выходных данных
2

Объяснение
Аня хочет подарить Лёше последовательность из 2 частей KitKat, которые в сумме дают 3. Этому удовлетворяют следующие последовательности:
• C0 + C1 = 1+2 = 3
• C1 + C2 = 2+1 = 3

Шаблоны на языке Java и Kotlin

Условия конкурса
1. Решения принимаются в течении 48 часов, то есть до 1 апреля 2020 года, 18:00. Необходимо отправить только тело функции.
2. Отправить можно только одно решение.
3. Можно исправлять отправленное решение неограниченное количество раз. Принятым будет считаться решение, отправленное последним.
4. Победителем будет являться самое короткое тело функции func().
5. В подсчете количества символов учитывается только тело функции. Например, в примере return 0; количество символов равняется 9. Это и определяет длину решения.
6. Переименовывать функцию нельзя, как и изменять входные параметры. В Kotlin убирать return также запрещается.
7. Требований к форматированию нет, важно рабочее решение. Можно убирать пробелы между переменными и писать код в одну строку, если это не нарушит работоспособность решения.
8. В случае одинаковых по длине решений, победитель будет выбран рандомно, а запись с выбором победителя будет опубликована на канале.

Обратите внимание, что решения, которые не удовлетворяют условиям конкурса не будут учитываться при проверке. Очень часто участники забывают о том, что нужно отправить только внутреннюю часть функции (тело функции), а не всю функцию, включая её заголовок, поэтому будьте внимательны при отправке итогового решения.

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

Решение нужно отправить в форму. Желаю всем удачи!
​​Build Gradle с Kotlin DSL
#разработка #статьи

До недавнего времени, единственным способом написания build-скриптов был язык Groovy. Писать build.gradle файл на этом языке было не так сложно, но всё равно это был другой язык программирования, да и его читаемость была так себе.

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

Пару статей, которые расскажут о том, как это сделать. Тут можно узнать о том, как действовать в случае возникновения конфликтов при переходе, а эта статья по шагам поможет перейти на Kotlin DSL.
​​Результаты конкурса «KitKat-подарок на День рождения»
#конкурс

Итак, самое время подвести итоги нашего последнего конкурса.
В этот раз все 100% решений были сделаны на Kotlin. И коротким оказалось только одно решение, хотя многие другие были близки к нему.

Итак, самое короткое решение на Kotlin состоит из 47 символов:

return c.take(n).windowed(m).count{it.sum()==d}

Соответственно, победитель — @amihusb

Напоминаю, что победитель получает книгу «Визуализируйте работу. Как выявить расхитителей времени и оптимизировать процессы» Доминики Деграндис от издательства МИФ.

Большое спасибо всем участникам конкурса! И поздравляю победителя!

Кстати, хотел бы узнать: какие призы вам были бы наиболее интересны при проведении подобных конкурсов? Напишите, пожалуйста, сюда.