Android Broadcast – Telegram
Android Broadcast
14.4K subscribers
3.68K photos
367 videos
11 files
6.1K links
Подборка новостей и статей для Android разработчиков.

Реклама и связь с автором @ab_manager

РКН https://abdev.by/rkn_tg_ab #MQRZR
Download Telegram
#Codelab #Coroutines #ArchitectureComponents

Advanced Coroutines with Kotlin Flow and LiveData
Продолжительность: 57 минут

В библиотеках ViewMode, Lifecycle и LiveData 2.2.0 было добавлена расширенная поддержка Kotlin Coroutines:
👉 Специальный билдер liveData {}, который внутри может выполнять suspend функции
👉 Конвертация Flow <-> LiveData
👉 Поддержка запуска Coroutine с Lifecycle и соответсвующие CoroutineScope в Fragment и Activity

В новой Codelab вы можете найти практическое занятие, которое поможет усвоить вам все аспекты нового функционала, а также расскажет о Flow, принципах работы с ними и его интеграции в ваши Android приложения для решения распространённых задач.

Почему стоит обратить внимание на Flow?
1️⃣ Это полностью нативный для Kotlin способ для работы с реактивными потоками данных
2️⃣ Он проще чем RxJava. Написать свой оператор намного проще
3️⃣ Flow быстрее RxJava и других существующих реализации Rx на Java/Kotlin (тесты есть в репозитории kotlinx.coroutines)
#Kotlin #Coroutines #Flow

Instant Search with Kotlin Coroutines

В продолжение темы работы с Coroutine Flow - в статье разбирается задача организации поиска «на лету» (по мере ввода) в UI для Android на основе Flow.
#Coroutine

В последнее время я нахожу много материалов по Kotlin Coroutine. Думаю, что это связано с тем что Kotlin Coroutine активно пропагандируются командой Android для решения асинхронных задач и то что Flow - это способ решения задач для обработки потоков данных (замена RxJava). С одной стороны я понимаю, что пропаганда этого подхода - закономерный шаг при лозунге «Kotlin First» в Android. Но что там с альтернативами? На подходе RxJava 3, есть Reaktive - Rx на чистом Kotlin, возможно кто-то строит асинхронные запросы на основе стандартного API в Android SDK/JDK.

Не могу скрывать, что я и сам придерживаюсь подхода Kotlin Coroutine. Тяну ли я Coroutine в свои проекты - регулярно! Я люблю поделиться своим опытом или рассказать о результатах интересных исследований, поэтому выступаю с докладами, в рамках которых я имею возможность проводить краткие опросы. Результаты опроса «Используете ли вы Coroutine?» меня печалят - большая часть зала пользуется RxJava для асинхронных задач.

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

Присоединяетесь к обсуждению в @android_broadcast_discussions
#Kotlin #CodeQuality

Вышел Detekt 1.3.0

Вышла новая версия утилиты для проверки качества Kotlin кода. В обновлении произошли следующие важные изменения:
👉 Новые правила: UnnecessaryAnnotationUseSiteTarget и MapGetWithNotNullAssertionOperator
👉 Минимальная поддерживаемая версия Gradle выросла до 5.0
👉 Исправление багов
👉 Улучшения в документации
#Git #Tests #Modularization

Selectively running Android modularized unit tests on your CI server

Рецепт как запускать тесты только в тех модулях, в которых произошли изменения в вашем ПР. Это позволит уменьшить количество применяемых тестов и быстрее проверять ПР.
#News

Для всех кто слушает подкаст от Android Broadcast и любит Apple сервисы есть радостная новость - подкаст стал доступен в Apple Podcasts.

Для тех же кто пользуется Android подкаст можно найти в SoundCloud и Pocket Cast. Пишите в личку @krlrozov, если хотите увидеть подкаст и в других ваших любимых сервисах.
#MotionLayout #Animation

MotionLayout: A new way to create animations on Android

Обещанного 3 года ждут? Мы ждали Motion Editor всего 2 😁. Уже в Android Studio 4.0 Motion Editor доступен всем! Теперь мы получили удобный визуальный редактор для анимаций и пора вспомнить, что было и как MotionLayout меняет игры в анимацию!
#Новости

Всем привет! Вот уже пошел третий день как на канале не появляются новости. Я не ленюсь и все также смотрю и читаю новости, пытаюсь найти что-то интересное, но видно все авторы ушли в новогодние 🎄и рождественские 🔔праздники, в связи с чем и контента пока будет меньше чем обычно.

Вы всегда можете поскролить вверх, посмотреть ранние статьи или нажать хэштег и найти всё по интересующей вас теме.
#BestPractices

The Seven (Actually 10) Cardinal Sins of Android Development

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

В статье разбираются ошибки, которые не стоит допускать в вашем коде. С чем-то из этого вы будете знакомы, а с чем-то нет:
👉 Статические ссылки на Android компоненты с жизненным циклом (Activity/Fragment/View и др.)
👉 Неправильно получение ссылки на Fragment
👉 Хранение Fragment в FragmentPagerAdapter (ViewPager)
👉 Аргументы в конструкторе Fragment
👉 Задание переменных Fragment с использованием set функций при создании
👉 Не сохранять состояние через в Bundle при использование ViewModel
👉 Загружать данные только при savedInstanceState == null
👉 Инициализация Fragment в некорректном состоянии
👉 Переопределение onResume()/onPause() для всего подряд
👉 Не final static переменные
#LiveData #Kotlin #Nullability

Improving LiveData nullability in Kotlin

Не раздражало ли вас, что при объявлении LiveData<Value> в Kotlin, вы все равно можете получить null в Observer или задать null значение через LiveData.value?

Проблема заключается в том, что LiveData написана на Java и ничего не знает о системе типов в Kotlin и особенностях Generic. Исправить это через -ktx библиотеки не получится, так как надо переписывать LiveData на Kotlin или иметь спец аннотации для Java, чтобы обеспечивать совместимость.

В статье автор описывает не самое красивое решение, но эффективное - создание подкласса MutableLiveData с полной поддержкой Kotlin.
#Coroutines #Flow #Reactive

Back-pressure in Kotlin Flows

Back-pressure - это та вещь про которую надо задумываться когда вы работает с Reactive подходами. Back-pressure - это когда источник данных посылает новые данные быстрее чем им может обработать подписчик. Из-за этого возникает необходимость задания политики что делать с очередью данных.

В статье разбирается как об Back-pressure не надо задумываться когда вы используете Coroutine Flow, благодаря suspend функциям и принципам их работы.
#AndroidX #Browser

AndroidX Browser 1.2.0

Вышла новая мажорная версия библиотеки Browser 1.2.0 в которой произошли следующие ключевые изменения:
👉 Поддержка Trusted Web Activities вышла в Stable
👉 Поддержка темной темы для ChromeCustomTab
👉 CustomTabsSession может быть создана с заданным заранее id, что позволяет объединять сессию с одного клиента для последовательно запущенных CustomTab
#Dagger #IDEA

Introducing Scabbard: Easily visualize Dagger 2 dependency graphs

Это случилось - плагин для визуализации графа зависимостей Dagger 2. И называется это счастье - Scabbard. Он позволяет увидеть Component, Subcomponent, зависимости, их Scope и отношения между ними.

Проект еще в разработке и находится в версии 0.1.0
👉 Gihub проекта
👉 Инструкция по настройке
This media is not supported in your browser
VIEW IN TELEGRAM
Пример визуализации графа из Android Studio
#AndroidOS

System App In Android

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

Но что могут делать системные приложения? Почему нам не дают их заменить? Почему разработчики стороннего лаунчера или звонилки не могут получить все возможности предустановленного приложения?

В статье разбираются особенности системных приложений и их возможности, которые не даны простым сторонним приложениям.
#Splash #Coroutines

A Guide on Splash Screen in Android in 2020

Экран-заставка (Splash Screen) довольно часто явление в мобильных приложениях. Цели его разные:
👉 Красивое интро в приложение
👉 Начальная Activity приложения определяется динамически
👉 Быстры рендеринг просто экрана, пока идет инициализация приложения (холодный старт)
👉 Комбинация описанных выше пунктов 😁

В статье рассматриваются рекомендации по созданию Splash Screen:
👉 Использование android:windowBackground для задания фона экрана
👉 Как правильно отсчитывать время до закрытия Splash Screen: Handler / Timer / Coroutines
Есть ли Splash Screen в ваших приложениях?
Anonymous Poll
84%
Да
16%
Нет
#Новости

Вот и наступил новый год. Для меня 2019-й год прошёл очень бодро и с множеством событий как в работе, так и моей активности за её рамками. Одно из самых неожиданных стало для меня, что канал «Android Broadcast» прижился и я слышу положительные отзывы, а также идеи того, что сделать лучше от вас (статистику можно посмотреть выше 📈 ⬆️)

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

С большим уважением, автор канала Кирилл Розов
#OkHttp #Networking

Вышел OkHttp 4.3.0

Пока вчера все готовились к празднованию нового года ребята из OkHttp решили сделать новый релиз. Список изменений небольшой и имеет только одну новое важное изменение:
👉 Более агрессивное переиспользование потоков между OkHttp's HTTP/2 соединениями, connection pool, web socket-ами, и кэшем
👉 Обновление до Kotlin 1.3.61
👉 Исправление багов
#MemoryLeak #LeakCanary

Вышел LeakCanary 2.1.0

Популярная утилита для поиска утечек памяти развивается дальше. После недавне представленной версии 2.0 уже выходит следующее минорное обновление, в которое попали новые функции:
👉 Gradle плагин для обфусцированных приложений. Раньше была проблема, что при тестировании обфусцированной сборки приложения (с R8 или ProGuard) все стектрейсы было бесполезно смотреть с устройства так, как все названия классов/методов были изменены. Встречайте LeakCanary gradle плагин для обфусцированных приложений, которые решает это
👉 Множество улучшений в UI приложения для просмотра утечек памяти на устройства
👉 Улучшение документации
👉 Улучшение в API Leak и LeakTrace
👉 Автоматическое отключение LeakCanary, если в classpath найден заданный класс. По умолчанию этим классом является org.junit.Test
👉 Возможность изменения способа с помощью которого LeakCanary ищет утечки памяти в heap dump
👉 Интерактивный режим работы CLI