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
#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