#7 Kotlin Coroutines Flow. StateFlow. SharedFlow || Курс по корутинам

แชร์
ฝัง
  • เผยแพร่เมื่อ 2 ส.ค. 2024
  • Что такое Flow. Горячии и холодные Flow. StateFlow. SharedFlow. Разница между Flow и Channel
    Курс сделан при поддержке компании Revolut. Вакансии компании здесь bit.ly/3vb561U
    🔗 Telegram канал "Android Broadcast" ttttt.me/android_broadcast
    💰 Поддержать проект на Boosty boosty.to/androidbroadcast
    🔗 Чат сообщества в Telegram ttttt.me/android_broadcast_talks
    🔗 Telegram канал "Kotlin Broadcast" ttttt.me/kotlin_broadcast
    🔗 Документация по Flow kotlinlang.org/docs/flow.html
    🔗 Android Developers. Kotlin Flow dandroid.com/kotlin/flow
    🔗 Android Developers. StateFlow & SharedFlow d.android.com/kotlin/flow/sta...
    🔗 ViewModel: One-off event antipatterns / viewmodel-one-off-even...
    🔗 Exceptions in Kotlin Flows by Roman Elizarov / exceptions-in-kotlin-f...
    0:00 Вступление
    2:32 Операторы
    6:05 Терминальные операторы
    7:29 Кэширование
    8:48 Адаптер для асинхронных подходов
    12:09 Смена контекста выполнения
    13:14 Обработка ошибок
    14:57 SharedFlow
    18:10 StateFlow
    19:02 Миграция с RxJava
    19:53 Backpressure
    20:12 Заключение
    #coroutines #androidbroadcast #курс #androiddev #android #программирование #kotlin #КириллРозов #андроид #AndroidBroadcast

ความคิดเห็น • 41

  • @AndroidBroadcast
    @AndroidBroadcast  2 ปีที่แล้ว +2

    🔗 Telegram канал "Android Broadcast" ttttt.me/android_broadcast
    🔗 Telegram канал "Kotlin Broadcast" ttttt.me/kotlin_broadcast
    💰 Ранний доступ к новым видео на Boosty boosty.to/androidbroadcast
    🔗 Чат сообщества в Telegram ttttt.me/android_broadcast_talks

  • @open-mind7718
    @open-mind7718 2 ปีที่แล้ว +23

    Нихуя не понял, но очень интересно

    • @AndroidBroadcast
      @AndroidBroadcast  2 ปีที่แล้ว +6

      Возвращайся когда прокачаешься

  • @user-zd1hy8os7v
    @user-zd1hy8os7v ปีที่แล้ว +1

    Очень большая концентрация) Видимо для большего количества просмотров) зачёт!))

    • @AndroidBroadcast
      @AndroidBroadcast  ปีที่แล้ว +1

      Нет, точно не ради просмотром

    • @user-zd1hy8os7v
      @user-zd1hy8os7v ปีที่แล้ว

      @@AndroidBroadcast ну тогда вдвойне круто)

  • @eminyenaliyev8037
    @eminyenaliyev8037 2 ปีที่แล้ว +19

    Видео материал получился очень классным, сразу видна большая проделанная работа, спасибо. Но то как преподносится, выглядит как то зазубренным или считанным контентом из какой нибудь документации, скудновато и без какого то реального погружения, вспомнился универ когда на первой паре засыпаешь под монотонную лекцию.

    • @user-cf1yn2sm5r
      @user-cf1yn2sm5r 5 วันที่ผ่านมา

      Согласен но ценность от этого не падает, например я знаком с темой и смотрю такие видео что бы оперативно можно было подготовиться к новому собесу ничего не забыв

  • @tonylazarte3034
    @tonylazarte3034 ปีที่แล้ว +1

    У меня один наброс, все круто, но в конце не хватает результата.
    Типа мы поглядели вот этот функционал, вот так хорошо вот так можно выхватить
    так мне кажется усваиваться будет проще, не надо перелистывать

    • @AndroidBroadcast
      @AndroidBroadcast  ปีที่แล้ว

      Спасибо за обратную связь

  • @llun3330
    @llun3330 2 ปีที่แล้ว

    Спасибо за видео!
    А есть ли механизм для пробрасывания исключений из SharedFlow? (для холодных, потоков, как я понимаю, можно просто кинуть исключение в билдере)
    Как альтернатива, думаю можно обернуть в Result

    • @AndroidBroadcast
      @AndroidBroadcast  2 ปีที่แล้ว

      На самом деле я про такое не знаю, но SharedFlow и StateFlow не делались с целью вбрасывать в них исключение

  • @holydiver5891
    @holydiver5891 2 หลายเดือนก่อน

    пожелание-просьба на будущее. Не убирайте код с экрана, можно же и себя и код одновременно показывать.

  • @evghenigherghelejiu9499
    @evghenigherghelejiu9499 6 วันที่ผ่านมา

    малюсенькая ошибка на 3:16 выходное = downstream

  • @user-ww2gn6pw9q
    @user-ww2gn6pw9q 7 หลายเดือนก่อน

    все круто, спасибо, но почему не в android studio? ведь так было бы проще для понимания

    • @AndroidBroadcast
      @AndroidBroadcast  7 หลายเดือนก่อน

      Зачем Android Studio, если подходит и IDEA? Для записи видео был включен Presentation Mode , чтобы убрать все лишнее с экрана

  • @nikson9334
    @nikson9334 5 หลายเดือนก่อน

    Мне кажется это надо неделю на примерах разбирать..

  • @user-bo7yz7wb1h
    @user-bo7yz7wb1h 2 ปีที่แล้ว +2

    На счёт shared flow и suspend стратегии поправлю: поведение buffer overflow работает только если есть хотя бы один подписчик, который не готов принять значение. Когда подпискичков нет, значения просто игнорятся. Вот копипаста из документации:
    * **Buffer overflow can happen only when there is at least one subscriber that is not ready to accept
    * the new value.** In the absence of subscribers only the most recent [replay] values are stored and
    * the buffer overflow behavior is never triggered and has no effect.
    Что бы дождаться хотя бы одного подписчика я перед эмитом вызываю такой код: sharedFlow.subscriptionCount.first { it > 0 }

  • @NicolaeCozmaNcozma
    @NicolaeCozmaNcozma 2 ปีที่แล้ว

    THX

  • @dream_owner
    @dream_owner 2 ปีที่แล้ว

    18:44
    А чем не устраивает такая замена SingleLiveEvent?
    private val eventChannel = Channel()
    val eventFlow = eventChannel.receiveAsFlow()

    • @BelokonRoman
      @BelokonRoman 2 ปีที่แล้ว

      Есть на медиуме статья Kotlin’s Flow in ViewModels: it’s complicated - в ней описано какие есть кейсы, когда Flow не справляется

    • @dream_owner
      @dream_owner 2 ปีที่แล้ว

      Конкретно в этом случае не вижу противоречия со статьей
      [Да и статья не то чтобы очень]

    • @tripabroad8918
      @tripabroad8918 ปีที่แล้ว

      Или MutableSharedFlow(replay = 0) ?

    • @dream_owner
      @dream_owner ปีที่แล้ว

      @@tripabroad8918 , не, у SharedFlow другое поведение

    • @tripabroad8918
      @tripabroad8918 ปีที่แล้ว

      @@dream_owner Channel доставит элемент при подписке, который был передан в emit до подписки , а SharedFlow c replay = 0 нет, в этом будет разница?

  • @mikhaillazarev5378
    @mikhaillazarev5378 ปีที่แล้ว +2

    Прежде чем все это написать у меня нет мысли оскорбить или как то выпендриться перед автором, а хочется показать как именно все это выглядит лично для меня. (есть шанс что все таки увидит)
    Из всей линейки видео про корутин (не дошел до конца как заметно) я запомнил что видео создано при поддержки Револют, не думаю что это знание мне помогут в этом, да и опять же возможно проблема во мне, а не в видео. Если все это рассчитано для новичков, которые впервые хотят узнать о чем эта тема, то это лично для меня ничего толком не запомнилось, можно спихнуть на меня что я такой глупый, но если честно мне кажется я не один под таким впечатлением остался.
    Возможно у автора нет времени на более качественное преподнесение материала, было бы здорово если бы видео хотя бы давалось новичку перед заливом, чтобы действительно ли понять оно даст понимание данной темы или хотя бы видео строилось при изучение какой либо темы на основе примера в качестве проектика, чтобы было можно понять истинный смысл работы класса, библиотеки, корутин...
    Видно что автор старается преподнести информацию с красивыми анимациями, но от этого (лично для меня XD) не чуть понимания темы не увеличивается. Слишком много рассчитана на кликбейтность, красивые обложки видео, красивые майки с андроидом, атмосфера, а на смысл и качество информации оставляет желать лучшего.. Выглядит как чтение лекции с крутым преподом, который понимает информацию, но жмотничает ибо не фиг быть умным XD
    Не вижу дальше продолжать смотреть видео...
    Извиняюсь заранее если как то задел чувства автора😇

    • @AndroidBroadcast
      @AndroidBroadcast  ปีที่แล้ว

      Спасибо за качественную и вежливо поданную обратную связь

    • @Irod_Akayanny
      @Irod_Akayanny ปีที่แล้ว +1

      Так Кирилл же и говорил что это лекции НЕ для новичка. Так что не переживайте что усвояемость была плохой. Если с нуля, то на каждую минуту этого видео надо добавлять по 1 часу самостоятельной работе с другими источниками. Да по сути интерактивный пересказ документации, но и на это было затрачено много времени, за что ему спасибо, т.к. воспринимается легче.

  • @potatoechannel2760
    @potatoechannel2760 2 ปีที่แล้ว +1

    Статичные функции вместо методов? Звучит как нарушение ооп. Потенциально может быть расширять неудобно. Где я ошиблась?

    • @AndroidBroadcast
      @AndroidBroadcast  2 ปีที่แล้ว

      В чем нарушение ООП? Это же необязательное API, переопределять этим методы не надо

    • @BelokonRoman
      @BelokonRoman 2 ปีที่แล้ว +3

      Как бы в котлине в принципе присутствуют нотки фунциональщины - звучит как нарушение ООП.

    • @BelokonRoman
      @BelokonRoman 2 ปีที่แล้ว

      И да, у Елизарова есть статья Extension-oriented design где он как раз описывает этот подход

    • @vasiliychernov2123
      @vasiliychernov2123 2 ปีที่แล้ว +4

      Ошибка в том, что ООП не является единственно верной парадигмой.
      А теперь представьте, что апи Flow были бы выполнены в рамках догм ООП. Удобно расширять? Нет, нужно добавить метод в класс Flow, что противоречит OCP. Реализация оператора также может быть сильно усложнена необходимостью соблюдать инварианты класса. Пример такого подхода - RxJava. Второй вариант - создать новый класс-декоратор, в таком случае классов бы стало слишком много, и это было бы неудобно использовать.
      В случае использования методов-расширений расширять функциональность как раз таки очень удобно и просто, что Кирилл показал на примере создания своего оператора. Тут ещё конечно помогают функции как first-class citizen в Котлине и синтаксис, позволяющий построить свой DSL.

    • @potatoechannel2760
      @potatoechannel2760 2 ปีที่แล้ว

      @@vasiliychernov2123 я согласна, что парадигма не единственная. В ФП языках обычно нет полиморфизма, но есть классы типов, которых в котлине нет. Так что статичныые функции на хацкеле совершенно не то же самое, что и на котлине.

  • @sp1n3team
    @sp1n3team ปีที่แล้ว +3

    походу тебе надо поменьше кофе пить )) мой мозг не успевает за твоими словами

  • @VishalSoni-zp2ub
    @VishalSoni-zp2ub ปีที่แล้ว

    No Englis 😊

  • @evgeniybutov2792
    @evgeniybutov2792 2 ปีที่แล้ว +1

    Cпасибо за видос Кирилл.
    Да, тоже пробовал сделать из MutableSharedFlow - аля SingleLiveEvent
    и почти сработало =))
    fun SingleEventFlow() = MutableSharedFlow(
    extraBufferCapacity = 1,
    onBufferOverflow = BufferOverflow.DROP_OLDEST
    )
    Пока не подорвался на мине, свернув прилагу, получив ответ от бэка, развернув и не увидя перехода(
    Хотя вот сделав lifecycleScrope.launchWhenStart ... то с ним всё работало, но что-то другое вылезло.