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
#LiveData #Corotines #Flow

LiveData with Coroutines and Flow

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

Turbine - маленькая библиотека для тестирования kotlinx.coroutines Flow
Автор - Jake Wharton

Библиотека позволяет проверить какие данные были проэмичены в Flow
#Coroutines #Flow #LiveData

Refactoring from LiveData to Coroutines & Flow

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

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

FlowBinding 1.0.0 уже в релизе (EN)

Для всех кто любит реактивное программирование, использовал библиотеку RxBinding возрадуйтесь - теперь у вас есть стабильная версия binding на основе Coroutines Flow
#LiveData #Coroutines #Flow

Migrate from LiveData to StateFlow and SharedFlow

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

Better handling states between ViewModel and Composable

В статье рассказывается как лучше соединить изменение состояния из ViewModel в Compose на основе Coroutines Flow
#AndroidBroadcast #Coroutines #Flow

📺 Миграция с LiveData на Coroutines Flow (25 мин)

Демонстрирую как в ваших ViewModel можно перейти с LiveData на StateFlow/SharedFlow. Видео практической направленности и в нём вы найдёте минимум теории. Как всегда, коротко и по делу!

💰Поддержать проект
#Coroutines #Flow

A safer way to collect flows from Android UIs

Совсем недавно я выпустил видео про миграцию с LiveData на Flow и вскользь упомянул проблем с тем что нет CoroutineScope, который соответствует поведению подписки в LiveData. Новое API
👉 LifecycleOwner.addRepeatingJob
👉 Lifecycle.repeatOnLifecycle
👉 Flow.flowWithLifecycle

Функции доступны в lifecycler-runtime-ktx 2.4.0-alpha01
#Flow #Coroutines

Вышло официальное руководство "Kotlin flows on Android" в котором рассказывается что такое Flow, как его создать, модифицировать и получить данные.
#Corouitnes #Flow

Things to know about Flow’s shareIn and stateIn operators

Разбор как операторы shareIn и stateIn как могут увеличить производительность в отдельных случаях, демонстрация разницы между ними и ошибки, которые пользователи могут допустить с ними
#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 #flow

Making cold Flows lifecycle-aware

Разбор какие особенности получения значение из Flow в Android вас могу поджидать и что новые repeatOnLifecycle и flowWIthLifecycle не всегда могут вам подойти
#coroutines #flow

Kotlin Flow in Android summary (12 мин)

Обзор работы с Flow в Kotlin и Android частности. Большой талмуд! Ждём варианта на русском от автора
#coroutines #livedata #flow

Comparing Android LiveData and StateFlow (8 мин)

Сравнение LiveData и альтернативы его для потоков данных на основе Coroutines - StateFlow. Рассматриваются вопросы почему нельзя заменить и какие есть ограничения у StateFlow
💩29👍13🤩1
Вышла библиотека KotlinX Coroutines 1.9.0
👩‍💻 Поддержка Wasm/WASI таргета
👉 limitedParallelism() позволяет задать имя Dispatcher для упрощения дебага. Также это стало стабильным API
👉 JVM. Dispatchers.IO больше не инициализируется при доступе к любому из стандартных Dispatcher
👉 Оператор Flow<T>.chunked(size: Int): Flow<List<T>>
Еще больше deprecated API в BroadcastChannel
🛠 Исправление багов и улучшения

#coroutines #wasm #flow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29👎5
🤖 Как обработать слишком быстрый ввод пользователя с помощью Coroutines Flow

Если внимательно посмотреть на поведение людей в поисковых полях, становится понятно:
пальцы работают быстрее, чем приложение успевает реагировать.

Пользователь печатает «a», тут же «an», следом «and» — а приложение в панике пытается перестроить результаты после каждого шага. Поток начинает «стрелять» событиями, система перегружается, а интерфейс выглядит так, будто его кто-то перематывает на ускоренной перемотке.

Главная проблема здесь не скорость человека — а то, что приложение воспринимает каждую мелочь как повод что-то пересчитать.

Чтобы интерфейс работал предсказуемо, нужно научить поток реагировать не на каждое изменение, а на осмысленное завершение ввода.
Зачем нужен debounce()

Оператор debounce() работает как фильтр слишком быстрых изменений:
- быстрые изменения подряд — игнорируются
- устойчивое значение после паузы — двигаются по потоку дальше

Поток перестаёт реагировать на каждую букву и начинает слушать устойчивые состояния строки.

val results = queryFlow
.debounce(300) // значение задержки можно менять
.distinctUntilChanged()
.map { term -> searchData(term) }
.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyList())

------------
Помимо полезных символов, пользователь может случайно добавить пробел в конце или другой невидный символ. Фактически это тот же запрос — но без обработки поиск запустится повторно.

В таких случаях можно определиться как оператор distinctUntilChanged() будет сранивать значения:
queryFlow
.debounce(300)
.distinctUntilChanged { old, new ->
old.trim() == new.trim()
}


Теперь оба состояния считаются одинаковыми, и поиск не перезапускается зря.

#kotlin #coroutines #flow #android
Please open Telegram to view this post
VIEW IN TELEGRAM
880👍54🤔3