#Coroutines #LiveData #Test
Testing two consecutive LiveData emissions in Coroutines
В статье рассматривается проблема тестирования эмита 2 последовательных значений
Автор рассказывает о нескольких решениях:
1️⃣ TestCoroutineDispatcher из библиотеки
2️⃣ Использование
Хорошие практики использования
👉 Не используйте стандартный класс Dispatchers, а доставляйте зависимости сами с помощью DI. Это позволит вам подменять их в тестах и иметь больший контроль
👉Используйте TestCoroutineDispatcher вместо Dispatchers.Unconfined для тестов.
Testing two consecutive LiveData emissions in Coroutines
Kotlin Coroutines получают все большую популярность и активнее интегрируются в последние решения от Google, поэтому стоит рассматривать подходы, которые рекомендуется использовать.В статье рассматривается проблема тестирования эмита 2 последовательных значений
LiveData, одно из которых приходит из Coroutine. Автор рассказывает о нескольких решениях:
1️⃣ TestCoroutineDispatcher из библиотеки
kotlinx.coroutines.test, который позволяет приостанавливать и возобновлять CoroutineDispatcher2️⃣ Использование
LiveData.asFlow(). Пример можно найти в Pull RequestХорошие практики использования
Dispatcher-ов в тестах:👉 Не используйте стандартный класс Dispatchers, а доставляйте зависимости сами с помощью DI. Это позволит вам подменять их в тестах и иметь больший контроль
👉Используйте TestCoroutineDispatcher вместо Dispatchers.Unconfined для тестов.
TestCoroutineDispatcher дает больше гибкости для тестирования, чем Dispatchers.Unconfined, но последний все также может успешно выполнять Coroutine синхронно.Medium
Testing two consecutive LiveData emissions in Coroutines
This article is about how we unit tested two consecutive LiveData emissions by pausing and resuming the CoroutineDispatcher of a Coroutine
#ArhitectureComponents #LiveData
When NOT to Use LiveData
Android Architecture Components - это популярное решение. Одна из его самых популярных частей - LiveData. Ее поддерживает множество библиотек и позволяет вам получать данные с помощью нее.
Но всегда ли стоит использовать ее? Хорошее решение ли это для слоя данных и бизнес логики? В статье рассматривается когда не стоит использовать LiveData:
1️⃣ В вашем приложение испольуются потоки данных и вам нужно обрабатывать ошибки, backpressure и пр.
2️⃣ Не хватает операторов (спорный случай, так как есть сторонние библиотеки)
3️⃣ У вас нет взаимодействия с данными из UI
4️⃣ У вас одноразовая асинхронная операция (опять же спорно, так как с
5️⃣ Вам не нужно сохранять данные в UI
When NOT to Use LiveData
Android Architecture Components - это популярное решение. Одна из его самых популярных частей - LiveData. Ее поддерживает множество библиотек и позволяет вам получать данные с помощью нее.
Но всегда ли стоит использовать ее? Хорошее решение ли это для слоя данных и бизнес логики? В статье рассматривается когда не стоит использовать LiveData:
1️⃣ В вашем приложение испольуются потоки данных и вам нужно обрабатывать ошибки, backpressure и пр.
2️⃣ Не хватает операторов (спорный случай, так как есть сторонние библиотеки)
3️⃣ У вас нет взаимодействия с данными из UI
4️⃣ У вас одноразовая асинхронная операция (опять же спорно, так как с
LiveData удобно доставить результат и получить ее обновления, которое запрашивается пользователем в UI)5️⃣ Вам не нужно сохранять данные в UI
Medium
When NOT to Use LiveData
Let’s dive into the cases of using LiveData not to its purpose and creating limitations to the scalability in your project through this…
#LiveData #Kotlin #Nullability
Improving LiveData nullability in Kotlin
Не раздражало ли вас, что при объявлении
Проблема заключается в том, что LiveData написана на Java и ничего не знает о системе типов в Kotlin и особенностях Generic. Исправить это через -ktx библиотеки не получится, так как надо переписывать LiveData на Kotlin или иметь спец аннотации для Java, чтобы обеспечивать совместимость.
В статье автор описывает не самое красивое решение, но эффективное - создание подкласса
Improving LiveData nullability in Kotlin
Не раздражало ли вас, что при объявлении
LiveData<Value> в Kotlin, вы все равно можете получить null в Observer или задать null значение через LiveData.value? Проблема заключается в том, что LiveData написана на Java и ничего не знает о системе типов в Kotlin и особенностях Generic. Исправить это через -ktx библиотеки не получится, так как надо переписывать LiveData на Kotlin или иметь спец аннотации для Java, чтобы обеспечивать совместимость.
В статье автор описывает не самое красивое решение, но эффективное - создание подкласса
MutableLiveData с полной поддержкой Kotlin.Medium
Improving LiveData nullability in Kotlin
LiveData’s interop with Kotlin has always been a bit tricky. This blurb shows one way to handle LiveData’s nullability in a Kotlin world.
#Coroutines #LiveData #Architecture
Flow and LiveData in MVVM architecture
Пример использования LiveData и Kotlin Flow в архитектуре Android приложений:
👉 Что выбрать в качестве источника данных
👉
👉
Flow and LiveData in MVVM architecture
Пример использования LiveData и Kotlin Flow в архитектуре Android приложений:
👉 Что выбрать в качестве источника данных
Flow или LiveData?👉
Flow в ViewModel👉
Flow и ChannelMedium
Flow and LiveData in MVVM architecture
LiveData, Flow and Channels in a modern Android MVVM architecture
#LiveData #Coroutines #ArchitectureComponents
No more LiveData in Your Repository: There are better options
Google предложила в своей стандартной архитектуре использовать LiveData для получения данных из Repository. Это позволяет получать последние обновления.
Но так ли LiveData подходит для выполнения этой задачи? Либо лучше взять Coroutine Flow или Rx Observable для этого? Мой совет: "Да"! - LiveData больше про UI.
No more LiveData in Your Repository: There are better options
Google предложила в своей стандартной архитектуре использовать LiveData для получения данных из Repository. Это позволяет получать последние обновления.
Но так ли LiveData подходит для выполнения этой задачи? Либо лучше взять Coroutine Flow или Rx Observable для этого? Мой совет: "Да"! - LiveData больше про UI.
Medium
No more LiveData in Your Repository: There are better options.
Three years ago at a Google I/O that every Android developer remembers, Google announced Android Architecture Components and we were all…
#LiveData #Corotines #Flow
LiveData with Coroutines and Flow
Серия статей от гуглера о реактивном UI на основе Coroutine Flow. В серии статей рассказывается о:
👉 Реактивном UI
👉 Scope выполнения операций
👉 Почему Kotlin Coroutine хорошо подходят для решения асинхронных UI задач
👉 Интеграция Coroutines и Arch Components
👉 Отмена выполнения Coroutine
👉 Подходы для работы с
LiveData with Coroutines and Flow
Серия статей от гуглера о реактивном UI на основе Coroutine Flow. В серии статей рассказывается о:
👉 Реактивном UI
👉 Scope выполнения операций
👉 Почему Kotlin Coroutine хорошо подходят для решения асинхронных UI задач
👉 Интеграция Coroutines и Arch Components
👉 Отмена выполнения Coroutine
👉 Подходы для работы с
LiveData и Coroutine в ViewModelMedium
LiveData with Coroutines and Flow — Part I: Reactive UIs
This article is a summary of the talk I gave with Yigit Boyar at the Android Dev Summit 2019.
#Arhitecture #LIveData
Don’t use LiveData in Repositories
Появление Arch Component показало и видение архитектуры от Google на основе этих компонентов (схема тут). Видение это подразумевало, что начиная от источников данных в Storage и Repostiory у вас возвращаются LiveData, для обеспечения реактивного получения обновления данных.
Вы задумывались о том, почему компонент
Также
Хорошей заменой для этого будет использование LiveData только для коммуникации между ViewModel и UI, а на всех остальных слоях другие реактивные подходы:
👉 Coroutines Flow
👉 Reaktive
👉 RxJava
Don’t use LiveData in Repositories
Появление Arch Component показало и видение архитектуры от Google на основе этих компонентов (схема тут). Видение это подразумевало, что начиная от источников данных в Storage и Repostiory у вас возвращаются LiveData, для обеспечения реактивного получения обновления данных.
Вы задумывались о том, почему компонент
LiveData, который имеет связь с жизненным циклом (ЖЦ), используется в слое с данными. Данные должны быть абстрагированы от особенностей платформы, в особенности таких как ЖЦ. Также
LiveData имеет особенности по работе, например обновление данных происходит через главный поток, для обеспечения синхронизации обновленийХорошей заменой для этого будет использование LiveData только для коммуникации между ViewModel и UI, а на всех остальных слоях другие реактивные подходы:
👉 Coroutines Flow
👉 Reaktive
👉 RxJava
Medium
Don’t use LiveData in Repositories
We recently joined a new project with heavy LiveData usage, everywhere. Here’s what we learned about LiveData, Threading and Repositories.
#Coroutines #Flow #LiveData
Refactoring from LiveData to Coroutines & Flow
Помните руководство где Google рекомендовала на всех слоях использовать LiveData для коммуникации между слоями? Так вот - это заблуждение. LiveData нужна только на UI слое, а на других - Coroutines, Reactive подход или что-то еще асинхронное
В статье разбирается как мигрировать с LiveData на Coroutines и Flow
Refactoring from LiveData to Coroutines & Flow
Помните руководство где Google рекомендовала на всех слоях использовать LiveData для коммуникации между слоями? Так вот - это заблуждение. LiveData нужна только на UI слое, а на других - Coroutines, Reactive подход или что-то еще асинхронное
В статье разбирается как мигрировать с LiveData на Coroutines и Flow
Medium
Refactoring from LiveData to Coroutines & Flow
How we refactored lots of LiveData and blocked threads to Coroutines and Flow.
#LiveData #Kotlin
Avoid backing properties for LiveData and StateFlow
Использование
Я жду в языке фичи о которой рассказал Роман Елизаров, решающую проблему (подробнее здесь).
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.
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.
Migrating from LiveData to Kotlin’s Flow
Для всех кто пишет на Kotlin под Android Google рекомендует переходить с LiveData на Coroutines Flow. В статье разбираются реальные задачи с решением в LiveData и как они будут решаться с Flow.
#livedata #flow #миграция
Миграция с LiveData на Kotlin’s 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 ещё может быть актуальна
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
Comparing Android LiveData and StateFlow (8 мин)
Сравнение LiveData и альтернативы его для потоков данных на основе Coroutines - StateFlow. Рассматриваются вопросы почему нельзя заменить и какие есть ограничения у StateFlow
💩29👍13🤩1