Отладка Kotlin Flow с помощью IntelliJ IDEA – учебное пособие
Это учебное пособие демонстрирует, как создать Kotlin Flow и отладить его с помощью IntelliJ IDEA.
В учебном пособии предполагается, что вы знакомы с концепциями корутин и Kotlin Flow.
Создание Kotlin flow
Создайте Kotlin flow с медленным эмиттером и медленным коллектором:
Откройте Kotlin-проект в IntelliJ IDEA. Если у вас нет проекта, создайте его.
-
Откройте файл
main.ktвsrc/main/kotlin.Директория
srcсодержит Kotlin-исходные файлы и ресурсы. Файлmain.ktсодержит пример кода, который будет выводитьHello World!. -
Создайте функцию
simple(), которая возвращает поток из трех чисел:Используйте функцию
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 мс без блокировки потока.Выведите собранное значение из потока с помощью функции
println().
fun main() = runBlocking { simple() .collect { value -> delay(300) println(value) } } -
Соберите код, нажав Собрать проект.
Отладка корутины
-
Установите контрольную точку на строке, где вызывается функция
emit(): -
Запустите код в режиме отладки, нажав Отладка рядом с настройками запуска в верхней части экрана.
Открывается окно Отладки:
Вкладка Фреймы содержит стек вызовов.
Вкладка Переменные содержит переменные в текущем контексте. Она показывает, что поток выводит первое значение.
Вкладка Корутины содержит информацию о запущенных или приостановленных корутинах.
-
Возобновите сеанс отладки, нажав Продолжить программу в окне Отладки. Программа остановится на той же контрольной точке.
Теперь поток выводит второе значение.
Добавление корутины, выполняющейся параллельно
Откройте файл
main.ktвsrc/main/kotlin.-
Улучшите код для одновременного выполнения эмиттера и коллектора:
Добавьте вызов функции
buffer()для одновременного выполнения эмиттера и коллектора.buffer()сохраняет выводимые значения и выполняет коллектор потока в отдельной корутине.
fun main() = runBlocking<Unit> { simple() .buffer() .collect { value -> delay(300) println(value) } } Соберите код, нажав Собрать проект.
Отладка Kotlin flow с двумя корутинами
Установите новую контрольную точку в
println(value).-
Запустите код в режиме отладки, нажав Отладка рядом с настройками запуска в верхней части экрана.
Открывается окно Отладки.
На вкладке Корутины вы можете увидеть, что две корутины выполняются параллельно. Коллектор и эмиттер потока выполняются в отдельных корутинах из-за функции
buffer(). Функцияbuffer()буферизует выводимые значения из потока. Корутина эмиттера имеет статус ЗАПУЩЕНА, а корутина коллектора — ПРИОСТАНОВЛЕНА. -
Возобновите сеанс отладки, нажав Продолжить программу в окне Отладки.
Теперь корутина коллектора имеет статус ЗАПУЩЕНА, а корутина эмиттера — ПРИОСТАНОВЛЕНА.
Вы можете углубиться в каждую корутину для отладки своего кода.
© 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