Android Broadcast
14.1K subscribers
3.47K photos
316 videos
11 files
5.78K links
Подборка новостей и статей для Android разработчиков.

Связь с автором @android_broadcast_bot
Реклама @android_broadcast_bot

РКН https://abdev.by/rkn_tg_ab
Download Telegram
#ArchitectureComponents, #DataBinding #Coroutines

ViewModels with Saved State, Jetpack Navigation, Data Binding and Coroutines

Architecture Components, представленные в 2017 году, значительно повлияли на разработку Android приложений. ViewModel используется в более чем 40% процентов приложений. За счет такой большой популярности это компонент все активнее и развивается и обрастает новыми функциями:
👉 Поддержка сохранения состояния в ViewModel
👉 Интеграция между Navigation библиотекой и ViewModel
👉 Использование ViewModel в DataBinding
👉 Поддержка Kotlin Coroutines в ViewModel на основе viewModelScope
#SQLite #Coroutines #Room #ArchitectureComponents

Threading models in Coroutines and Android SQLite API

В Room 2.1.0 появилась поддержка Coroutine, но особенность их работы в том, что они не гарантируют выполнение всей Coroutine в одном Java потоке. И тут получается проблема - SQLite требует выполнение транзакций в одном и том же потоке.

Как эту проблему решили разработчики Room? Для этого была создана специальная функции withTransaction, которая позволяет выполнять транзакции в БД с помощью Room на основе Coroutine.

В статье вы найдете подробности реализации транзакций SQLite при использовании Coroutine и как можно использовать CoroutineContext.
#Architecture #Modularization #ArchitectureComponents

Modularization by Feature and Layer with Android Architecture Components

Команда Android в последние 2 года активно стала решать трудности, связанные с разработкой эффективной архитектуры для Android приложений. Результат этого - Android Architecture Components.

Трендом текущей Android разработки является модуляризация. Она дает плюсы в архитектуре, более высокую скорость сборки проектов и возможность использовать Dynamic Features.

Как позволяет это реализовать текущий стек Architecture Components вы найдете в статье
#MVVM #AppArchitecture #ArchitectureComponents

Android MVVM — Do’s and Don’ts

Несколько рекомендаций при реализации архитектуры MVVM на основе Architecture Components:
👉 ViewModel не должна использовать классы из Android SDK. Используйте интерфейсы, которые позволят вам абстрагироваться от платформенной реализации.
👉 View не должна содержать какой либо логики (быть пассивной). Место для всей логики - это ViewModel.
👉 ViewModel не должна иметь ссылки на View
👉 Если вы хотите получать обновления данных от LiveData для обновления UI, тогда используйте viewLifecycleOwner.
#Architecture #ArchitectureComponents #AndroidX #MVVM

С появлением Architecture Components в Android реализация MVVM на основе этих компонентов стала очень популярна. Я и сам выбираю такое решение в связи с тем, что она имеет множество позитивных моментов:
👉 Решение популярных задач в архитектуре Android приложений
👉 Хорошая документация: статьи, видео, примеры и Codelab
👉 Интеграция с инструментарием для разработки
👉 Поддержка от Google
👉 Большинство разработчиков знают как ее реализовывать и это способ единообразен из-за одного источника правды (Google). Это уменьшает время на обучение стажеров и интеграцию новых людей + между проектами становится общий стандарт
👉 Интеграция между различными библиотеками из Architecture Component так и сторонними (RxJava, Kotlin Coroutines)

Я не считаю ее идеалом, но Arch Components значительно упрощают создание приложений на Android и дает взгляд на архитектуру приложений от создателя Android SDK.
#ArchitectureComponents #ViewModel #BestPractices

When to load data in ViewModels

Советы по загрузке данных в ViewModel:
Вызывать метод для загрузки данных
Запускать загрузку при создании ViewModel
Запускать загрузку данных отложено (lazy)
Загружать данные в LiveData, когда происходит вызов onActive()
Передавайте все необходимые данные в ViewModel через конструктор, а не функции или свойства
#SQLite #ArchitectureComponents #Room

Packing the Room: Pre-populate your database with this one method

Сейчас в разработке находится следующая версия (2.2) популярного ORM решения для Android - Room. В этой версии появляется функция предзаполнения, которая позволяет вам заполнить БД контентом из файла.

Это позволит избегать парсинга данных из файлов для заполнения данными и ускорить старт приложения.
#ArchitectureComponents

Android ProcessLifecycleOwner by example

Очень часто приходится сталкиваться с задачей по определению, когда приложение скрывается с экрана. Android Arсhitecture Components имеют ProcessLifecycleOwner. В статье рассматриваются подробности его работы и как его использовать
#ArchitectureComponents #LiveData

Unit-testing LiveData and other common observability problems

Важно помнить, что LiveData посылает обновления, только в том случае, когда у нее есть хотя бы один подписчик (observer). Это может привести к ошибкам в ваших тестах (успешно их прохождению или нет).

В статье рассматриваются ошибки и рекомендации по использованию LiveData в тестах:
👉 Используйте LiveData.getOrAwaitValue(timeout: Long) для получения результата из LiveData в unit тестах
👉 Используйте InstantTaskExecutorRule для предотвращения проблем с многопоточностью при работе с LiveData
👉 Частая ошибка - используйте один и тот же объект ViewModel, если он шарится между несколькими Fragment
#WorkManager #ArchitectureComponents

Workout your tasks with WorkManager — Advanced Topics

Продолжение серии статей о работе с WorkManager. В текущей рассматривается:
1️⃣ Как идентифицировать Task
2️⃣ Как получить статус Task
3️⃣ Политики по повторению выполнения Task (backoff)
4️⃣ Зависимости выполнения Task между собой
5️⃣ Как работать с входными и выходными данными
6️⃣ Как можно управлять многопоточностью в WorkManager
#ArchitectureComponents #Navigation #DynamicFeature

Navigation with Dynamic Feature Modules

Android Architecture Components - набор библиотек, который решил много проблем Android разработчиков и дал множество простых решений, одним из который является Navigation, который упрощает переходы между экранами в Android приложениях.

В свою очередь Google до сих пор не представила стабильного решения (пока есть только SNAPSHOT сборки) для навигации по приложению, когда вы используете Dynamic Delivery.

В статье описывается способ как с помощью Deep Link и Activity медиатора для обработки все таких ссылок достигается зен Navigation + Dynamic Delivery.
#Navigation #ArchitectureComponents #CustomTab

Add Chrome Custom Tabs to the Android Navigation Component

Architecture Components предоставило нам множество возможностей и библиотек, которые решили сложности работы с Android SDK. Одним из таких решений стало Navigation. Она позволяет вам эффективно описывать граф навигации, открывая Fragment, Activity, DialogFragment и deep link.

Как можно расширить и добавить новые типы Destination в графе? Библиотека также позволяет сделать и в статье вы найдете рецепт как сделать это.

Основы рецепта:
1️⃣ Создание собственного Destination
2️⃣ Создание собственного Navigator
3️⃣ Объявление кастомных атрибутов в XML (опционально)
4️⃣ Добавить поддержку нового Navigator в Navigation Host
#ArchitectureComponents #Architecture #Modularization

Android Components Architecture in a Modular Word

Хорошая статья в которой происходит разбор модуляризации Android приложения:
👉 Принципы осуществления модуляризации
👉 Модули и их роли
👉 Множество других полезный статей и примеров
👉 Проблемы со сторонними библиотеками
👉 Собственный пример
#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)
#Jetpack #ArchitectureComponents #Lifecycle

Optimizing Android ViewModel with Lifecycle 2.2.0

Обзор последних возможностей библиотек Lifecycle (LiveData, ViewMode, Lifecycle), ktx расширений и лучших практик:
👉 Делегаты ViewModel
👉 Почему не стоит использовать AndroidViewModel
👉 Какие данные не стоит передавать в ViewModel
👉 Сохранение данных ViewModel
#DependencyInjection #ArchitectureComponents #ViewModel

Injecting ViewModel — hard to easy

В современной Android разработке очень популярна архитектура MVVM на основе Arch Components. И куда же современное приложение без Dependency Injection (DI).

Создание ViewModel и доставка зависимостей в ее конструктор с помощью DI - нетривиальная задача, так как создать ViewModel просто через конструктор неправильно, нужно делать это через ViewModelProvider.Factory.

В статье разбирается как решить эту задачу с помощью Dagger и Koin.
#LiveData #Coroutines #ArchitectureComponents

No more LiveData in Your Repository: There are better options

Google предложила в своей стандартной архитектуре использовать LiveData для получения данных из Repository. Это позволяет получать последние обновления.

Но так ли LiveData подходит для выполнения этой задачи? Либо лучше взять Coroutine Flow или Rx Observable для этого? Мой совет: "Да"! - LiveData больше про UI.
#ArchitectureComponents #ViewModel

Should I use Jetpack ViewModel?

Архитектура MVVM на основе Jetpack на сегодня довольно популярна в Android разработке. Вы задумывались так ли много проблем решает ViewModel из Jetpack?

Автор в своей статье приводит доводы, которые заставят вас задуматься так ли все просто и помогут найти проблемы
#ArchitectureComponents #Navigation

What’s New in Navigation 2020

Navigation Arch Component в первой своей версии много чего не умел, чего не хватало разработчикам. За последнее время все это наверстали:
👉 Доступ к NavBackStackEntry: расширение навигации за рамки NavDestination
👉 Шаринг данных между элементами NavGraph с помощью NavBackStackEntry, которая является ViewModelProvider
👉 Поддержка Activity Result
👉 Поддержка Dynamic Features
👉 Тестирование навигации
👉 Получение параметров из Deep Link
👉 Kotlin DSL для описания графа
👉 Улучшения API

В статье найдете более подробный обзор этих возможностей