TGTGInsighttelegram intelligenceLIVE / telegram public index
Retour aux chaînes
Android Broadcast avatar

TGINSIGHT CHAT

Android Broadcast

@android_broadcast

Technologies

Подборка новостей и статей для Android разработчиков. Реклама и связь с автором @ab_manager РКН https://abdev.by/rkn_tg_ab#MQRZR

Abonnés1.4万Abonnés actuels de la chaîne
Posts indexés1,000Nombre de posts indexés
Portée récente7,330Somme des vues récentes
Posts récents

Posts récents

Tag : #flow · 1 post

当前筛选 #flow清除筛选

🤖Как обработать слишком быстрый ввод пользователя с помощью 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

7,330 views