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
#Coroutines #LiveData #Test

Testing two consecutive LiveData emissions in Coroutines

Kotlin Coroutines получают все большую популярность и активнее интегрируются в последние решения от Google, поэтому стоит рассматривать подходы, которые рекомендуется использовать.

В статье рассматривается проблема тестирования эмита 2 последовательных значений LiveData, одно из которых приходит из Coroutine.

Автор рассказывает о нескольких решениях:
1️⃣ TestCoroutineDispatcher из библиотеки kotlinx.coroutines.test, который позволяет приостанавливать и возобновлять CoroutineDispatcher
2️⃣ Использование LiveData.asFlow(). Пример можно найти в Pull Request

Хорошие практики использования Dispatcher-ов в тестах:
👉 Не используйте стандартный класс Dispatchers, а доставляйте зависимости сами с помощью DI. Это позволит вам подменять их в тестах и иметь больший контроль
👉Используйте TestCoroutineDispatcher вместо Dispatchers.Unconfined для тестов. TestCoroutineDispatcher дает больше гибкости для тестирования, чем Dispatchers.Unconfined, но последний все также может успешно выполнять Coroutine синхронно.
#ArhitectureComponents #LiveData

When NOT to Use LiveData

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

Но всегда ли стоит использовать ее? Хорошее решение ли это для слоя данных и бизнес логики? В статье рассматривается когда не стоит использовать LiveData:
1️⃣ В вашем приложение испольуются потоки данных и вам нужно обрабатывать ошибки, backpressure и пр.
2️⃣ Не хватает операторов (спорный случай, так как есть сторонние библиотеки)
3️⃣ У вас нет взаимодействия с данными из UI
4️⃣ У вас одноразовая асинхронная операция (опять же спорно, так как с LiveData удобно доставить результат и получить ее обновления, которое запрашивается пользователем в UI)
5️⃣ Вам не нужно сохранять данные в UI
#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 #LiveData #Architecture

Flow and LiveData in MVVM architecture

Пример использования LiveData и Kotlin Flow в архитектуре Android приложений:
👉 Что выбрать в качестве источника данных Flow или LiveData?
👉 Flow в ViewModel
👉 Flow и Channel
#LiveData #Coroutines #ArchitectureComponents

No more LiveData in Your Repository: There are better options

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

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

LiveData with Coroutines and Flow

Серия статей от гуглера о реактивном UI на основе Coroutine Flow. В серии статей рассказывается о:
👉 Реактивном UI
👉 Scope выполнения операций
👉 Почему Kotlin Coroutine хорошо подходят для решения асинхронных UI задач
👉 Интеграция Coroutines и Arch Components
👉 Отмена выполнения Coroutine
👉 Подходы для работы с LiveData и Coroutine в ViewModel
#Arhitecture #LIveData

Don’t use LiveData in Repositories

Появление Arch Component показало и видение архитектуры от Google на основе этих компонентов (схема тут). Видение это подразумевало, что начиная от источников данных в Storage и Repostiory у вас возвращаются LiveData, для обеспечения реактивного получения обновления данных.

Вы задумывались о том, почему компонент LiveData, который имеет связь с жизненным циклом (ЖЦ), используется в слое с данными. Данные должны быть абстрагированы от особенностей платформы, в особенности таких как ЖЦ.

Также LiveData имеет особенности по работе, например обновление данных происходит через главный поток, для обеспечения синхронизации обновлений

Хорошей заменой для этого будет использование LiveData только для коммуникации между ViewModel и UI, а на всех остальных слоях другие реактивные подходы:
👉 Coroutines Flow
👉 Reaktive
👉 RxJava
#Coroutines #Flow #LiveData

Refactoring from LiveData to Coroutines & Flow

Помните руководство где Google рекомендовала на всех слоях использовать LiveData для коммуникации между слоями? Так вот - это заблуждение. LiveData нужна только на UI слое, а на других - Coroutines, Reactive подход или что-то еще асинхронное

В статье разбирается как мигрировать с LiveData на Coroutines и Flow
#LiveData #Kotlin

Avoid backing properties for LiveData and StateFlow

Использование LiveData, StateFlow и SharedFlow в ViewModel имеет свою неприятную особенность - создание приватного модифицируемого property и публичного только для чтения. Автор предлагает решение в лоб - абстракция в виде интерфейса или абстрактного класса и разведёт модифицируемый и немодифицируемые поля. Встают вопросы интеграции этого с ViewModelFactory, DI и др.

Я жду в языке фичи о которой рассказал Роман Елизаров, решающую проблему (подробнее здесь).
#LiveData #Coroutines #Flow

Migrate from LiveData to StateFlow and SharedFlow

Руководство по миграции с LiveData на Flow и его вариации. Также рассматривается почему это надо делать и какие преимущества даёт Flow.
#LiveData #Flow

Migrating from LiveData to Kotlin’s Flow

Для всех кто пишет на Kotlin под Android Google рекомендует переходить с LiveData на Coroutines Flow. В статье разбираются реальные задачи с решением в LiveData и как они будут решаться с Flow.
#livedata #flow #миграция

Миграция с LiveData на Kotlin’s Flow

В название все описано полностью - разбор как мигрировать с LiveData на Flow. Больше нечего добавить
#viewmodel #livedata #flow

Kotlin’s Flow in ViewModels: it’s complicated

Разбор реактивных подходов в ViewModel: LiveData, Flow, StateFlow, сравнение и почему LiveData ещё может быть актуальна
#coroutines #livedata #flow

Comparing Android LiveData and StateFlow (8 мин)

Сравнение LiveData и альтернативы его для потоков данных на основе Coroutines - StateFlow. Рассматриваются вопросы почему нельзя заменить и какие есть ограничения у StateFlow
💩29👍13🤩1