Статьи, курсы и практика по асинхронному программированию на Kotlin. От первой корутины до реактивной архитектуры с Room, Retrofit и Jetpack Compose.
Новые статьи
- Room + Flow: когда база данных сама обновляет интерфейсКлассический подход к работе с базой данных в Android выглядит так: отправил запрос, получил результат, обновил UI. Понадобились свежие данные — отправил ещё один запрос. Добавил запись — снова запросил весь список. Удалил — запросил. Изменил — запросил. Схема «запрос-ответ» работает, но заставляет разработчика вручную синхронизировать данные с интерфейсом. Room предлагает другой подход. … Читать далее
- NetworkResult: оборачиваем сетевой запрос в sealed-классЛюбой сетевой запрос в приложении может закончиться тремя способами: данные загружаются, данные получены, что-то пошло не так. Эти три состояния — Loading, Success, Error — повторяются из экрана в экран, из проекта в проект. Каждый раз писать try/catch, вручную переключать флаги isLoading и isError — утомительно и чревато ошибками. Вместо этого можно упаковать … Читать далее
- flatMapLatest и семейство *Latest: отменяй устаревшее, показывай актуальноеВ предыдущей статье мы научились фильтровать входной поток: убрали дребезг, дубликаты, пустые запросы. Но мы не затронули другую проблему: что происходит, если обработка одного значения занимает больше времени, чем интервал между двумя значениями? Представьте: пользователь ищет рецепты. Набрал «пирог» — приложение отправило запрос. Пока сервер думает, пользователь передумал и исправил на «пирожки». Приложение … Читать далее
- debounce, distinctUntilChanged и filter: три оператора, без которых не обходится ни один поискПредставьте: пользователь открывает строку поиска и начинает набирать запрос. Каждый символ порождает новое значение в потоке: Если реагировать на каждый символ, приложение отправит шесть запросов к серверу за полторы секунды. Пять из них бессмысленны: пользователь ещё не закончил печатать. Сервер нагружен, батарея садится, а интерфейс дёргается, показывая промежуточные результаты, которые тут же устаревают. … Читать далее
- stateIn() и shareIn(): как подогреть холодный Flow для UIМы уже выяснили, что холодный Flow плохо дружит с Compose: при каждой рекомпозиции поток перезапускается с нуля. Решение — превратить его в горячий. Но как именно? В Kotlin есть два оператора-подогревателя: stateIn() и shareIn(). Первый превращает холодный Flow в StateFlow, второй — в SharedFlow. Оба живут в скоупе, который вы им укажете, и … Читать далее
Мок-интервью для Android-разработчиков
На канале Overqualified разбираем вопросы с собеседований по корутинам и Flow в Kotlin.