#ArchComponents #Livedata #Testing
Writing effective ViewModel test от Josef Raska
Статья-реклама библиотеки LiveData Testing, которая позволяет эффективно тестировать LiveData в ViewModel.
По итогу ваш код сводится к
viewModel.counterLiveData()
.test()
.assertHasValue()
.assertValue(5)
Writing effective ViewModel test от Josef Raska
Статья-реклама библиотеки LiveData Testing, которая позволяет эффективно тестировать LiveData в ViewModel.
По итогу ваш код сводится к
viewModel.counterLiveData()
.test()
.assertHasValue()
.assertValue(5)
Medium
Effective LiveData and ViewModel Testing
Learn how you can write effective tests of LiveData and ViewModel with ease.
#Coroutines #AndroidX
Use Kotlin coroutines with Architecture components
В AndroidX для поддержки Coroutines добавили следующее:
👉 CoroutineWorker для WorkManager, позволяющий выполнять задачу при помощи корутин
👉 Поддержка suspend функций в Room. Пока нет возможности наблюдать за изменениями с помощью Channel и Flow, но их поддержка уже в работе
👉 Поддержка Coroutine в LiveData
👉 ViewModel.viewModelScope
👉 LifecycleScope - CoroutineScope, связанный с Lifecycle
👉 Lifecycle-aware Coroutines:
Замечание: Множество из нового функционала доступны в следующих версиях библиотек, которые еще на в релизе
Use Kotlin coroutines with Architecture components
В AndroidX для поддержки Coroutines добавили следующее:
👉 CoroutineWorker для WorkManager, позволяющий выполнять задачу при помощи корутин
👉 Поддержка suspend функций в Room. Пока нет возможности наблюдать за изменениями с помощью Channel и Flow, но их поддержка уже в работе
👉 Поддержка Coroutine в LiveData
👉 ViewModel.viewModelScope
👉 LifecycleScope - CoroutineScope, связанный с Lifecycle
👉 Lifecycle-aware Coroutines:
whenCreated
, whenStarted
, whenResumed
, которые запустятся в соотвествующий момент жизненного циклаЗамечание: Множество из нового функционала доступны в следующих версиях библиотек, которые еще на в релизе
#Architecture #LiveData
How not to use sealed classes and LiveData for state management
Разбор построения архитектуры на
How not to use sealed classes and LiveData for state management
Разбор построения архитектуры на
ViewModel
+ LiveData
+ State Object
. State Object представляет собой Sealed класс, который содержит всю информацию о состоянии экрана.Medium
How not to use sealed classes and LiveData for state management
A journey about things that don’t work
#ArchitectureComponents #LiveData
Unit-testing LiveData and other common observability problems
Важно помнить, что
В статье рассматриваются ошибки и рекомендации по использованию
👉 Используйте
👉 Используйте InstantTaskExecutorRule для предотвращения проблем с многопоточностью при работе с
👉 Частая ошибка - используйте один и тот же объект
Unit-testing LiveData and other common observability problems
Важно помнить, что
LiveData
посылает обновления, только в том случае, когда у нее есть хотя бы один подписчик (observer). Это может привести к ошибкам в ваших тестах (успешно их прохождению или нет).В статье рассматриваются ошибки и рекомендации по использованию
LiveData
в тестах:👉 Используйте
LiveData.getOrAwaitValue(timeout: Long)
для получения результата из LiveData
в unit тестах👉 Используйте InstantTaskExecutorRule для предотвращения проблем с многопоточностью при работе с
LiveData
👉 Частая ошибка - используйте один и тот же объект
ViewModel
, если он шарится между несколькими Fragment
Medium
Unit-testing LiveData and other common observability problems
Next time you’re scratching your head looking at a perfectly fine unit test with LiveDatas that should be passing, or at an empty screen…
#ArchitectureComponents #LiveData #Location
Android Tutorial On Location Update With LiveData
Гайд по интеграции Fused Location Provider и
Android Tutorial On Location Update With LiveData
Гайд по интеграции Fused Location Provider и
LiveData
, чтобы получать обновления геопозиции красиво с использованием Architecture ComponentsMedium
Android Tutorial On Location Update With LiveData
In this tutorial, I will introduce you to how to implement continuous location update with Android architecture components and Google…
#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
, который позволяет приостанавливать и возобновлять CoroutineDispatcher
2️⃣ Использование
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
и Channel
Medium
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
в ViewModel
Medium
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