Отладка Kotlin Flow с помощью IntelliJ IDEA – учебник
Этот учебник демонстрирует, как создать Kotlin Flow и отладить его с помощью IntelliJ IDEA.
Для работы с учебником предполагается, что у вас есть предварительные знания о корутинах и Kotlin Flow.
Создание Kotlin Flow
Создайте Kotlin flow с медленным источником и медленным коллектором:
Откройте Kotlin-проект в IntelliJ IDEA. Если у вас нет проекта, создайте его.
-
Для использования библиотеки
kotlinx.coroutinesв проекте Gradle добавьте следующую зависимость вbuild.gradle(.kts):dependencies { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4") }dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4' }Для других систем сборки см. инструкции в
kotlinx.coroutinesREADME. -
Откройте файл
Main.ktвsrc/main/kotlin.Директория
srcсодержит Kotlin-исходные файлы и ресурсы. ФайлMain.ktсодержит пример кода, который будет выводитьHello World!. -
Создайте функцию
simple(), которая возвращает flow из трех чисел:Используйте функцию
delay()для имитации ресурсоемкого блокирующего кода. Она приостанавливает корутину на 100 мс без блокировки потока.Выполните генерацию значений в цикле
forс помощью функцииemit().
import kotlinx.coroutines.* import kotlinx.coroutines.flow.* import kotlin.system.* fun simple(): Flow<Int> = flow { for (i in 1..3) { delay(100) emit(i) } } -
Измените код в функции
main():Используйте блок
runBlocking()для обертки корутины.Соберите выпущенные значения с помощью функции
collect().Используйте функцию
delay()для имитации ресурсоемкого кода. Она приостанавливает корутину на 300 мс без блокировки потока.Выведите собранное значение из flow с помощью функции
println().
fun main() = runBlocking { simple() .collect { value -> delay(300) println(value) } } -
Соберите код, нажав Собрать проект.
Отладка корутины
-
Установите точку останова в строке, где вызывается функция
emit(). -
Запустите код в режиме отладки, нажав Отладить рядом с конфигурацией запуска в верхней части экрана.
Откроется окно Отладка:
Вкладка Фреймы содержит стек вызовов.
Вкладка Переменные содержит переменные в текущем контексте. Это показывает нам, что flow выпускает первое значение.
Вкладка Корутины содержит информацию о работающих или приостановленных корутинах.

-
Возобновите сеанс отладки, нажав Возобновить программу в окне Отладка. Программа останавливается на той же точке останова.
Теперь flow выпускает второе значение.

Добавление одновременно выполняемой корутины
Откройте файл
Main.ktвsrc/main/kotlin.-
Улучшите код, чтобы запустить источник и коллектор одновременно:
Добавьте вызов функции
buffer(), чтобы запустить источник и коллектор одновременно.buffer()хранит выпущенные значения и запускает коллектор flow в отдельной корутине.
fun main() = runBlocking<Unit> { simple() .buffer() .collect { value -> delay(300) println(value) } } Соберите код, нажав Собрать проект.
Отладка Kotlin flow с двумя корутинами
Установите новую точку останова в
println(value).-
Запустите код в режиме отладки, нажав Отладить рядом с конфигурацией запуска в верхней части экрана.

Откроется окно Отладка.
На вкладке Корутины вы увидите, что две корутины работают одновременно. Коллектор и эмиттер flow работают в отдельных корутинах из-за функции
buffer(). Функцияbuffer()буферизует выпущенные значения flow. Корутина эмиттера имеет статус ВЫПОЛНЯЕТСЯ, а корутина коллектора имеет статус ПРИОСТАНОВЛЕНА. -
Возобновите сеанс отладки, нажав Возобновить программу в окне Отладка.

Теперь корутина коллектора имеет статус ВЫПОЛНЯЕТСЯ, а корутина эмиттера — ПРИОСТАНОВЛЕНА.
Вы можете углубиться в каждую корутину для отладки своего кода.
© 2010–2022 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/debug-flow-with-idea.html