dir.by  
  Поиск  
Компьютер, программы
Kotlin
 flow - это поток данных в Kotlin. Это замена LiveData в Android Kotlin и замена Observable в RxJava 
посмотрели 809 раз
обновлено: 2 августа 2026
flow это асинхронный поток данных.
flow другими словами это асинхронная функция которая выпускает данные.
flow это альтернатива стандартным коллекциям(спискам, массивам)
flow может использоваться только в корутинах
Пример
  Kotlin  
fun main() {

     // функция flow описывает поток без запуска
     val myflow1 = flow {
          emit(5) // поток выпускает значение
          emit(3) // поток выпускает значение
          emit(9) // поток выпускает значение
     }

     // функция collect запускает поток
     myflow1.collect { value ->  // получаем данные из потока
           println( value)
     }
}
Что такое  flow  в книге?
flow это реализация паттерна наблюдатель. У вас есть источник данных и подписчик, и flow как раз реализует источник данных.
flow это новая часть корутин, представленная компанией JetBrains и призванная сделать корутины более реактивным фреймворком, заменив собой Rx и LiveData. Интересно, что когда придумали корутины, то преимущества корутин было: удобное использование и синхронная работа. То есть можно вычислять все данные прямо там, где они нужны и не нужны колбэки.
Но! После долгой работы с корутинами выяснилось, что реактивность все-таки иногда нужна, а подходящего решения не было и придумали flow.
Существует несколько библиотек и фреймворков, которые предоставляют аналогичные возможности для работы с асинхронными потоками данных:
Shared Flow
Shared Flow хранит в себе кэш, из которого достаются данные когда на них будет подписан коллектор.

Представьте, вы находитесь в приложении по подбору авто на продажу. Пока пользователь свернул приложение у вас сгенерировалось несколько новых вариантов, а когда пользователь открыл приложение, вы сможете отобразить ему варианты.

Причем, используя параметры, вы можете отсеивать события, дропать первые или последние и так далее. Если shared flow переполнится, то он приостановит эмиттеры до тех пор, пока их не обработает, но при этом он не дожидается обработки их коллекторами. То есть у вас получается очень быстрая шина данных внутри вашего приложения.
MutableSharedFlow
MutableSharedFlow позволяет получать данные одновременно из suspend источников и из non-suspend источников.
Ещё в MutableSharedFlow можно сбросить кэш при необходимости.
StateFlow
StateFlow хранит последнее значение из источника данных.
Если к нам приходило три значения 5, 20, и 14, а значение 14 было последним, то, при подписке на StateFlow мы получим значение 14.
Старые аналоги flow
RxJava (Observables, Observers)
RxJava это библиотека для реактивного программирования на Java, но также доступна для Kotlin. Она предоставляет Observables и Observers для работы с асинхронными потоками данных. RxJava имеет множество операторов для преобразования, фильтрации и объединения потоков данных.
RxJava (Flowable)
В RxJava, Flowable представляет собой более расширенный вариант Observable, который предназначен для работы с потоками данных, где может быть много элементов и потребители могут не успевать обрабатывать данные настолько быстро, насколько они поступают. Это решает проблему переполнения буфера в асинхронных потоках данных.
Project Reactor
Project Reactor это библиотека для реактивного программирования на языке Java, которая также имеет адаптеры для Kotlin. Она предоставляет Flux и Mono для работы с асинхронными данными и также включает в себя множество операторов для манипуляции данными.
LiveData
LiveData это часть Android Architecture Components, предназначенная для работы с Android компонентами. Она обеспечивает наблюдение за изменением данных и автоматически обновляет пользовательский интерфейс при изменении данных.
Reactive Streams
Reactive Streams это стандарт Java, предназначенный для работы с асинхронными потоками данных. Он определяет интерфейсы Publisher, Subscriber и Subscription, которые могут быть реализованы различными библиотеками, такими как RxJava, Project Reactor и другими.
 
← Предыдущая тема
Общий, template class в Kotlin | Пример: class MyBook[<]T[>] { ... }
 
Следующая тема →
Консольное Kotlin приложение работает как Android Jetpack Compose
 
Ваши Отзывы ... комментарии ...
   
Вашe имя
Ваш комментарий (www ссылки может добавлять только залогиненный пользователь)

  Объявления  
  Объявления  
 
Что такое Kotlin ?
Почему самой популярной средой разработки для Kotlin является IntelliJ IDEA?
Скачать и установить IntelliJ IDEA для изучения Kotlin
Создание нового консольного проекта для изучения Kotlin | IntelliJ IDEA
Устанавливаем значение
Объявлем переменную и устанавливаем значение в Kotlin | val, var, lateinit, константа: const val, глобальная переменная: companion object
null
null значение используем символ ? и ?. и !! и ?: и !!. и ?. в Kotlin
Int, Float, Boolean, Char ...
Целые числа в Kotlin: Byte, UByte, Short, UShort, Int, UInt, Long, ULong
Десятичные числа в Kotlin: Float, Double
Флаг со значениями true или false в Kotlin это: Boolean
Символ в Kotlin это: Char
Конвертация числа в текст на языке Kotlin | Int → String
String
Строка, текст в Kotlin это: String
Интерполяция строк в Kotlin. Пример: val address:String = "${street}, ${country}"
В чем отличие String и StringBuilder ?
Enum
Что такое перечисление (enum) в Kotlin ?
Как найти enum по значению в Kotlin ?
Коллекции и массивы
Коллекции это списки, словари и другие классы для добавления, удаления элементов, поиска элементов, сортировки элементов. | Kotlin
Списки в Kotlin. interface List , interface MutableList , class ArrayList
Создаем коллекции list, set, map и массив array в Kotlin
Функция
fun() { ... } - это функция в Kotlin. Функция нужна чтобы выполнить действие.
Функция расширения
Функция расширения в Kotlin. Позволяет добавить новую функцию в класс системный (List, ..) или мой (Book, ...)
Лямбда функция
Лямбда функция в Kotlin. Пример1: var myFunc1 : (a:Int, b:Int) -> Int = { p1, p2 -> p1 + p2 };
Class
Что такое class в Kotlin? Пример: class MyBook { ... } | первичный и вторичный конструктор | блок init
lateinit это поздняя инициализация для поля class | Kotlin
class, который наследует от интерфейса в Kotlin | Пример: class MyBook : IBook { ...}
Безымянный class, который наследует от интерфейса в Kotlin | Пример: val book1 = object : IBook { ...}
Общий, template class в Kotlin | Пример: class MyBook[<]T[>] { ... }
Flow
flow - это поток данных в Kotlin. Это замена LiveData в Android Kotlin и замена Observable в RxJava
Пишем программу
Консольное Kotlin приложение работает как Android Jetpack Compose

  Ваши вопросы присылайте по почте: info@dir.by