Миграция с LiveData на Coroutines Flow

Ғылым және технология

#AndroidBroadcast #Flow #Coroutines
Руководство по миграции с LiveData на StateFlow/SharedFlow при использовании архитектуры MVVM на основе Jetpack
📺 Важное обновление Lifecycle + Flow • Важно!!! Миграция с Li...
🔗 Avito.Tech avito.tech/
🔗 Поддержать проект taplink.cc/android_broadcast/...
🔗 Каналы "Android Broadcast" taplink.cc/android_broadcast
🔗 Документация по Flow kotlinlang.org/docs/flow.html
🔗 StateFlow and SharedFlow для Android разработчиков bit.ly/3lC3LLl
🔗 SharedFlow bit.ly/31gPevz
🔗 StateFlow bit.ly/2NDMHbx
🔗 LiveData bit.ly/3r8V9No
🔗 Новые API для повторения поведения подписки c Flow как LiveData bit.ly/31j5Hzk
0:00 Вступление
0:40 Партнерская интеграция
1:06 Теория по Flow
3:04 Миграция на StateFlow
10:34 Важная особенность StateFlow
11:04 Как создать SharedFlow
14:25 Конвертация Flow в StateFlow/SharedFlow
16:49 Миграция на Flow, когда LiveData не имеет начального значения
24:17 Заключение

Пікірлер: 123

  • @AndroidBroadcast
    @AndroidBroadcast3 жыл бұрын

    🔗 Avito.Tech avito.tech/ 💰 Поддержать проект bit.ly/3sratqQ 🔗 Telegram канал "Android Broadcast" ttttt.me/android_broadcast 🔗 Блог о жизни канала boosty.to/androidbroadcast 🔗 Telegram канал "Kotlin Broadcast" ttttt.me/kotlin_broadcast

  • @Nidvoraich
    @Nidvoraich3 жыл бұрын

    Сижу я такой, ищу видосы, чтоб вкурить работу с лайвдатой... Очень надеюсь, что Флоу не станет депрекейтет ещё до того, как я посмотрю это видео :)

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    LiveData вполне подходящая вещь. Видео - не призыв к миграции, а лишь руководство как это сделать, если вы хотите. В будущем буду делать такое вступление в начале ролика

  • @mukhtarbimurat5106
    @mukhtarbimurat51063 жыл бұрын

    Спасибо, очень полезно, ждем выпуск про MVI с функциональным программированием используя Flow

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Такого пока в планах нет, но вот Compose будет однозначно раскрываться

  • @ivanvlasov8308
    @ivanvlasov83083 жыл бұрын

    Спасибо, Кирилл, очень полезно!

  • @heroachilles
    @heroachilles2 жыл бұрын

    Благодарю, очень интересно!

  • @GriNAME
    @GriNAME2 жыл бұрын

    Спасибо за видео!

  • @Alexandr234
    @Alexandr2343 жыл бұрын

    спасибо большое Кирилл!

  • @kafychannel
    @kafychannel Жыл бұрын

    спасибо за видео, Кирилл!

  • @arturmavlyuchenko7647
    @arturmavlyuchenko76473 жыл бұрын

    Долгожданный выпуск!

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Даже слишком. Мне стыдно, что моё обещание и реализация так растянулись по времени

  • @user-sf8xx1hq7c
    @user-sf8xx1hq7c2 жыл бұрын

    Крутое видео) спасибо

  • @sanek1985t
    @sanek1985t3 жыл бұрын

    Какой-то оверинжениринг. Вроде простые вещи надо сделать, взять данные по сети или из бд или из нотифа и отобразить во вью . Теперь предлагается выкинуть лайвдата и использовать флоу с какими-то буферами итд. Хорошо бы объяснить на реальном примере какие проблемы решает флоу и почему это проще чем другие подходы и лучше. Спасибо

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Преимущества Flow - Возможность работать на любом поток - Единый подход на всех слоях - Большое количество операторов Flow - Больше гибкости чем в LiveData - Возможность работать в Multiplatform - Лучшая cвязка с Compose

  • @sanek1985t

    @sanek1985t

    3 жыл бұрын

    @@AndroidBroadcast хорошо бы детальныц пример причин такого перехода. Где люди взяли подходы livedata, eventbus, rx, flows, оценили, все выкинули и оставили flows. И объяснили почему они к этому пришли. Было бы клёво)

  • @zheil2977

    @zheil2977

    Жыл бұрын

    Приветствую! Прошел год. Ну как сейчас успехи? Разобрались в преимуществах Flow?

  • @sladkiymems

    @sladkiymems

    8 ай бұрын

    Приветствую! Прошел год. Ну как сейчас успехи? Разобрались в преимуществах Flow?

  • @swamp2113
    @swamp21133 жыл бұрын

    Спасибо за выпуск! Я для себя сделал экстеншен в стиле LiveData, так красивее выглядит: inline fun Flow.collectWhenStarted(lifecycleOwner: LifecycleOwner, crossinline action: suspend (value: T) -> Unit)

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Тоже хороший вариант

  • @deadchannal
    @deadchannal2 жыл бұрын

    Было полезно

  • @user-gc4je3fl6p
    @user-gc4je3fl6p2 жыл бұрын

    супер

  • @sanek1985t
    @sanek1985t3 жыл бұрын

    Автору, плиз, пригласите на интервью разработчиков популярных приложений и поговорите с ними об используемых там технологиях и почему и именно эти технологии. Будет реально интересно)

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

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

  • @monkas2738
    @monkas27383 жыл бұрын

    Спасибо, отличное видео! Хотелось бы как нибудь увидеть видео про MVI, с выходом беты Compose это можно вместе связать.

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Я думал над рассказом про Unidirectional Data Flow и о том какие именно архитектуры этому соответствуют. Сейчас в свободное время занимаюсь изучение Jetpack Compose

  • @codemachine19
    @codemachine1911 ай бұрын

    харош харош мужик давай еще еще

  • @syoritohatsuki
    @syoritohatsuki2 жыл бұрын

    Наконец-то пример миграции на простом приложении, а не на какой-то модели из жопиней с говно апи и предварительно закостыленым Retrofit и отголосками на DI

  • @tyt66612
    @tyt666122 жыл бұрын

    Весь день ломал голову как Flow закинуть в переменную и прослушивать значения этой переменной и наконец увидел, что есть функция emitAll() 👍

  • @codingpas
    @codingpas3 жыл бұрын

    Не гладя лайк

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Доверяй, но смотри до конца!

  • @user-vz9gt6ug3z
    @user-vz9gt6ug3z3 жыл бұрын

    Звук Топ

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Видна разница где писал на петличку и обычный микрофон (

  • @MrMonyag
    @MrMonyag3 жыл бұрын

    Вот еще бы я лайвкодинг на ютубе смотрел, это же для тех, кто не может в документацию! (сидит и смотрит, ставит лайк, оч хорошо, оч одобряет)

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Лайвкодинг должен быть как отрепетированное шоу быть, иначе это будет нудно (

  • @Chernov1984

    @Chernov1984

    3 жыл бұрын

    почитай документацию после ... часов работы,,, включил видос между делом, 15 мин и есть некое представление о теме

  • @luckystrike91
    @luckystrike912 жыл бұрын

    10:17 эмм, но ведь lifecycleScope будет закрыт только при onDestroy? тоесть если активити перейдет в onStop, оно будет по прежнему получать сообщения и пытаться апдейтить ui. или я что-то не так понял или в коде ошибка...

  • @Mihaivanov
    @Mihaivanov3 жыл бұрын

    Думаю, что правильнее назвать функцию collectWhenStarted, что явно сообщает о запуске flow. А также не лишним будет возвращать Job, которая возвращается функцией launchWhenStarted(). В итоге получается что-то вроде этого: fun Flow.collectWhenStarted(lifecycleScope: LifecycleCoroutineScope): Job { return lifecycleScope.launchWhenStarted { this@collectWhenStarted.collect() } }

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    collect - это стандартная suspend функция и не подразумевает под собой передачу Scope

  • @user-ir2qe2ue9y
    @user-ir2qe2ue9y3 жыл бұрын

    Поясните пожалуйста, зачем промежуточная обёртка Flow из юзкейса в другой Flow во вьюмодели? Почему нельзя напрямую вызвать stateIn или sharedIn на возвращаемом Flow (usecase)?

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Можно тайминг, где встречается это код, Так будет проще дать пояснение

  • @vadimmorozov30
    @vadimmorozov303 жыл бұрын

    было бы прикольно если бы заготовка валялась где то на гитхабе и я бы смог пройтись по шагам после сам) некий codelab'чик)

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Такой заготовки нет + нужно дополнительное время на ее подготовку, что будет затягивать работу над роликом (

  • @EpicRackBattle
    @EpicRackBattle3 жыл бұрын

    Спасибо за выпуск ! Кирилл pagining 3 (RemoteMediator) есть в планах сделать гаид?

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Да Paging 3 обязательно буду обозревать после стабильного релиза

  • @user-jg4pk6bq2g
    @user-jg4pk6bq2g3 жыл бұрын

    Крутое видео, спасибо) Кирилл, а можно в двух словах чем отличается flow от StateFlow&SharedFlow?

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    - Flow холодный, SharedFlow - горячий - Flow имеет только одного подписчика, SharedFlow - нескольких - SharedFlow может хранить цепочку событий - SharedFlow является более эффективной заменой BroadcastChannel

  • @stanislavlatyshev2621
    @stanislavlatyshev26212 жыл бұрын

    Испортил красивое значение лайков 777. Спасибо за видео очень помогло. Хотелось бы больше по корутинам и flow.

  • @AndroidBroadcast

    @AndroidBroadcast

    2 жыл бұрын

    Уже в раннем доступе есть первый урок из курса по Kotlin Coroutines boosty.to/androidbroadcast/posts/48374c74-9420-4046-bebf-382ceb624e37?share=post_link

  • @artemchep
    @artemchep3 жыл бұрын

    Не рекомендую так подписываться на Flow, это хоть и поставит его на паузу после onStop но не сделает неактивным! Если у вас там какая-то сложная логика и буферы то вполне вероятно что вы продолжите выполнять работу в фоне, иногда ее может накопиться прилично, особенно если вы уйдете глубоко по навигации.

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Естественно все зависит от задачи и чего хочется достичь. Копи-паста до добра никогда не доводила )

  • @artemchep

    @artemchep

    3 жыл бұрын

    @@AndroidBroadcast просто добрая половина сюда пришла именно за ней =)

  • @marattlepberghenov5786
    @marattlepberghenov57863 жыл бұрын

    Зачем использовать apply для mutableLiveData, если можно default значение положить в конструктор?

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Пропустил появление этого конструктора. Уже давно переехал на Flow, поэтому и не помнил. Спасибо что рассказали

  • @alekseyorekhov9095
    @alekseyorekhov90953 жыл бұрын

    А есть ли какие-то приемущества flow над livedata кроме нижеприведённых Из аргументов пока вижу, только: 1. Используется не в главном потоке 2. стандартизировать потоки в data и presentation, использовать 1 технологию лучше чем 2 3. можно не сильно запариваться со стандартизацией в случае сложных кейсов где нужно знать предыдущий стейт (и там и там будет flow использования). Аргумент про то, что пакет не androidx, считаю не сильно зачётным ибо сама вьюмодель с пакетом androidx. Интересуюсь вдруг что-то не учёл, может ещё какие-то полезные фичи есть.

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Ещё можно добавить что Flow имеет множество операторов, а также является мультиплатформенным подходом.

  • @alekseyorekhov9095

    @alekseyorekhov9095

    3 жыл бұрын

    Упс, загуглил, уже есть вьюмодель на iOS/Android, тогда точно мигрировать имеет смысл, тем более не очень долго👍

  • @audiserg
    @audiserg3 жыл бұрын

    А можно поподробней про usecase, может ссылочка найдется. Как то необычно, обычно даже в гуглопримерах, в зависимостях модели только репозитории. Я так понял это способ вынести логику из вьюмодели?

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    UseCase - это из Clean Arhitecture и в множестве статей по ней это будет упоминаться. Вот например proandroiddev.com/why-you-need-use-cases-interactors-142e8a6fe576

  • @MRAzartx
    @MRAzartx3 жыл бұрын

    Очень полезно и интересно. У меня одна не большая оговорка. Не скажу за всех, скажу за себя. Я недавно только начал заниматься андроидом, знания на уровне начала пути Джуна. Знаю что такое лайв дата и использовал ее, и в этом плане, первая часть видео с примерами на основе лайв даты была понятна, но вторая часть уже вызвала бОльшие затруднения в понимании. Было бы очень круто, если бы контент объяснялся немного проще, а в остальном - все очень круто.

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Это была практическая демонстрация с минимум теории. Теория по этому вопросу заняла бы отдельное видео. Курс по Coroutine я думаю делать и там все будет рассказывать подробно

  • @user-fm2jm2yd5n
    @user-fm2jm2yd5n3 жыл бұрын

    А chanells сейчас в coroutine используется? или они все, ушли под капот?

  • @IgorLevkivskiy

    @IgorLevkivskiy

    3 жыл бұрын

    Ну например если надо, чтобы событие(между корутинами) отработало только один раз только для одного консюмера

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Channels сейчас используются по их основному применению - общение между несколькими Coroutinе. Они будут использовать под капотом Flow в тех операторах где такое нужно. BroadcastChannle уже заменён SharedFlow, все операторы Channel тоже deprecated. Думаю что скоро уже все расчистят по основным API и будет видно конечный результат

  • @SpinQuarK26
    @SpinQuarK262 жыл бұрын

    Интересные способы работы, только возникает резонный вопрос зачем переходить на Flow с LiveData? Особенно когда у тебя только одно значение приходит (обычный get запрос), а не поток

  • @AndroidBroadcast

    @AndroidBroadcast

    2 жыл бұрын

    Нет причины делать это обязательно, но мне нравится унификация работы в асинхронном стиле, множество оператор и отсутствие необходимости работы в главном потоке. Поэтому я предпочитаю унификацию на всех слоях через Flow

  • @Alexeytrn
    @Alexeytrn3 жыл бұрын

    Вроде на ui рекомендуют прокидывать все еще live data. А до viewmodel уже котлиновские стримы. Хотя читал в твиттере, они хотят через пару недель представить что-то для работы со стримами на ui и таким образом полностью избавиться от livedata

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Да, там из-за особенностей работы LifecycleCoroutineScope. В видео я показал как стоит запускать сейчас, а в ближайшем будущем будут нормальной coroutineScope, соответствующие поведению LiveData с подписчиками

  • @__Minecraft_Poseidon__
    @__Minecraft_Poseidon__3 жыл бұрын

    Как с помощью Flow можно реализовать long polling?

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Если хочется иметь единое глобальное место в приложение для этого, то можно все события приходящие класть в SharedFlow и на него уже будут подписываться в разных местах приложения. flow { ... } позволит добиться того же, только каждый подписчик станет слушать события от сервера независимо и создавать отдельное подключение

  • @Chernov1984
    @Chernov19842 жыл бұрын

    +

  • @wtf_nick
    @wtf_nick3 жыл бұрын

    А как сделать что-то типа SingleLiveEvent для отображения диалогов и тд?

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Я способа не нашел. Фактически после доставки данных надо очищать буфер, но события о доставки нет. Также наследоваться от SharedFlow и StateFlow сейчас не рекомендуется

  • @aartikov

    @aartikov

    3 жыл бұрын

    Использовать Channel. Например, так: github.com/aartikov/Sesame/blob/master/sesame-property/src/main/kotlin/me/aartikov/sesame/property/Command.kt

  • @andreyliashuk2516

    @andreyliashuk2516

    3 жыл бұрын

    Я использовал sharedFlow с буфером 0, это не совсем SingleLiveEvent, но для диалогов и ui событий подойдёт.

  • @SuperMarkwel
    @SuperMarkwel3 жыл бұрын

    за 20 минут узнал больше чем в универе

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    От такого грущу за универ (

  • @tequilaonelove

    @tequilaonelove

    3 жыл бұрын

    Подскажите что за универы такие, которые андроид разработке учат, что-то интересно стало))

  • @kimdoc6351
    @kimdoc63513 жыл бұрын

    3 года изучаю Android разработку, не могу найти работу на позицию Junior, так же о себе, есть погашенная судимость, 26 лет, нет военного билета, как думаешь или думаете могу ли найти работу в ближайшее время ?

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Мне трудно что-то сказать без оценки уровня твоих знаний, ожиданий. Возможно, живёте в маленьком городе. Ближе к концу лета в сентябре начнутся стажировки в компаниях - это ваш шанс.

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Напиши мне в личку (почта есть в описании). Созвонимся и я попробую тебе подсказать как действовать

  • @sanek1985t
    @sanek1985t3 жыл бұрын

    Ребята, без стеба спрашиваю. Что будет с разработкой под андройд ? Все меняется чё то слишком быстро с неочевидными профитами. До коле ?! Это издевательство реально - апи устаревает с какой то нереальной скоростью, а значит и ваши знания и ваши инвестиции в изучение андройд. Когда делать приложения, если надо все время что то изучать ?! Прямо какой то JavaScript андройда. Как будто все разработчики сумасшедших либ с js ломанадись в андройд разработку и будут тут делать также. Я пообщался с ребятами из vk, которые разрабатывают приложение на андройд. Блин , да там нету никакого навигатор компонента. Там даже фрагменты не реплейсятся, а делается add + show/hide, то есть все экраны все время в памяти. Подозреваю там и rx то нету , не говоря уже о лайвдата и тем более флоу. Как так то . Крупные игроки не используют все эти новые фишки. Тогда резонный вопрос - зачем это?! Назовите мне популярные топ 20 приложении, которые юзают эти технологии , плиз

  • @wtf_nick

    @wtf_nick

    3 жыл бұрын

    По мне так нужно на старте проекта решать стек, и дальше не двигать его особо, если нет с ним проблем, и не переживать по этому поводу. Мы так-то инженеры, и переходя на другой проект просто должны за пару вечеров раскурить его стек и пойти дальше пилить фичи, параллельно разбираясь в тонкостях, большие проекты так просто не перепишешь, да и реально смысла нет менять технологию просто на чуть более удобный апи (не всегда кстати выходит удобнее), если реально есть профит, то да. Другое дело, что тогда не на всех собесах в тебе заинтересуются, ибо часто гоняют по конкретным либам, ну это уже специфика СНГ и то можно обновить немного свои знания перед сменой работы, в FAANG особо за молодежные либы не спрашивают насколько я понял. Короче говоря я бы не переживал так за все эти новшества, хотя бы знать альтернативу чему выкатили и какой профит можно получить, чтобы например не пилить новые фичи на асинтасках в 21 году

  • @wtf_nick

    @wtf_nick

    3 жыл бұрын

    А RX у вк есть, а вот DI нету) Большие проекты вообще вертели Jetpack, пишут много самописных решений под свои нужды типа Ribs, MVICore, Bazel

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Jetpack не является единственным путём. Его задача решить основные задачи которые возникают у разработчиков и предложить им стандартное решение. Только большие компании могут позволить себе писать всё своё. Компании помельче используют рекомендуемый стек для которых всё это и делается. Развитие технологий будет всегда. Угнаться за ним проблематично, но понимать что происходит быть полезно, но гнаться на внедрение не стоит, если для вас это не решает задач Бурное развитие Kotlin связано с его движение в Multiplatform, как и всей мобильной разработки и клиентской

  • @sergey30027

    @sergey30027

    3 жыл бұрын

    Делайте как чуваки, которые пилят телеграм, у них все самописное.

  • @deviantstudio

    @deviantstudio

    3 жыл бұрын

    топ20 аппов - это такое говнолегаси, что переписать его будет стоить охулиарды

  • @gorshkoov
    @gorshkoov3 жыл бұрын

    Кстати, StateFlow не стоит использовать с циклами. То есть если вы в цикле хотите подряд сделать несколько состояний, то промежуточные могут быть пропущены

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Не думал что так в цикле делают. Пропущены события по какой причине? Очень интерсно узнать

  • @gorshkoov

    @gorshkoov

    3 жыл бұрын

    Я не нашёл явной причины. Но внутри есть метод distinctUntilChanges, который, вероятно и управляет этим поведением. Да и в целом, если говорить о состоянии, и если оно возникает очень часто, то имеет смысл заигнорировать его и показать только актуальное. Для потока данных как раз и надо SharedFlow брать

  • @divanlobkowski3473

    @divanlobkowski3473

    2 жыл бұрын

    @@gorshkoov попробовал в цикле получить значения от 0 до 100, все приходят. Но, если эмитить в корутине, то придет только 0 и 100.

  • @user-ev6hk3mq7p
    @user-ev6hk3mq7p2 жыл бұрын

    Люди добрые помогите! В переменную типа Flow присваиваю значение Flow из Room Далее выполняем collect по это переменной (теперь когда что-то измениться в БД сработает блок кода в collect) Теперь проблема, я меняю в переменной о которой шла речь выше, ее значение, и присваиваю новое значение Flow Далее выполняю collect Теперь у меня работают два collect, как отменить первый сбор?

  • @AndroidBroadcast

    @AndroidBroadcast

    2 жыл бұрын

    Пишите в t.me/android_broadcast_talks

  • @artjomsalijevs8356
    @artjomsalijevs83563 жыл бұрын

    Не очень понимаю, в чем основной профит данной миграции?

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    - Возможность работать на множестве поток - Единый подход на всех слоях - Большое количество операторов для Flow - Больше гибкости чем в LiveData

  • @artjomsalijevs8356

    @artjomsalijevs8356

    3 жыл бұрын

    @@AndroidBroadcast как думаете, насколько высокая вероятность того, что LiveData будет выпелен из jetpack в пользу Flow (в будущем)

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Выпилен точно не будет, но учитывай что все идёт в Kotlin Multiplatform, то LiveData там не вписывается. Её просто перестанут пользоваться как случилось с AsyncTask

  • @evgeniy9248

    @evgeniy9248

    3 жыл бұрын

    @@artjomsalijevs8356 Согласен с Кириллом, народ просто по чуть чуть начнёт переходить на Flow, уходя от костылей с liveData. Удаляя всякие SingleLiveData.

  • @artjomsalijevs8356

    @artjomsalijevs8356

    3 жыл бұрын

    @@AndroidBroadcast у асинтаска было много проблем, он большой, не поворотливый и ничего не знал о состоянии. По этому переход на livedata дал гиганский ппофит в этих вопросах. А тут профиты, да есть, но не настолько ярко выражены. Есть смысл миграции если бы лайв дату планировали снять с поддержки / задепрекейтить в будущем. Все таки миграция больших проэктов это дорого

  • @itgik
    @itgik3 жыл бұрын

    LiveData умеет работать с dataBinding, ее можно использовать напрямую в xml layouat'ах. Есть ли такая поддержка у Flow? Это было бы очень здорово, чтобы полностью перейти на Flow

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Да, помойму в AS 4.2 такая возможность появилась

  • @bigsarg1813
    @bigsarg18133 жыл бұрын

    Я просто не доумеваю! кто ставит этим видео дизлайки?

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Не всем заходит формат или я что-то сказал не так. Всегда открыт для критики, только конструктивной и аргементированной

  • @user-oc7py1vy6s
    @user-oc7py1vy6s3 жыл бұрын

    Чем плоха LiveData? По мне у неё только один минус - она может обсервить только в главном потоке.

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Я не говорю что она плоха, но у Flow есть преимущества: - Возможность работать на множестве поток - Единый подход на всех слоях - Большое количество операторов для Flow - Больше гибкости чем в LiveData

  • @user-oc7py1vy6s

    @user-oc7py1vy6s

    3 жыл бұрын

    @@AndroidBroadcast я к тому что не нужно бежать переписывать существующий код на LiveData на Flow.

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Это с любой новомодной технологий и трендами. Всегда нужно иметь свою голову.

  • @ViperCinema4D

    @ViperCinema4D

    3 жыл бұрын

    Минусы LiveData по сравнению с Shared/StateFlow: - В LiveData по дефолту не требует указывать начальное значение - LiveData не поддерживает нуллабельный дженерик - например если завести поле LiveData, то его 'value' всё равно будет иметь тип 'String?' - У LiveData нет возможности делать поток событий без костылей типа SingleLiveEvent

  • @AlexKhomenock

    @AlexKhomenock

    3 жыл бұрын

    @@ViperCinema4D насчёт последнего, у flow тоже нет нормального способа реализовать такое поведение

  • @Nidvoraich
    @Nidvoraich3 жыл бұрын

    Чтобы не было нагромождений в коде - я написал миллион экстеншенов. А тем, у кого в руках телефон шестилетней давности, сосать лапу с производительностью? Или это как-то равноценно оптимизируется?

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Множество оптимизаций выполняет компиллятор Kolin, а также R8/ProGuard в релизных сборках. Заниматься написанием кода, который должен поддерживать старые слабые устройства непростая задача и мало у кого есть на нее ресурсы, так как это накладывает дополнительное время разработки и тестирования

  • @Nidvoraich

    @Nidvoraich

    3 жыл бұрын

    @@AndroidBroadcast я в Андроид пришёл после программирования микроконтроллеров, где каждый бит на счету :) Для меня создать анонимный КЛАСС для выполнения одного действия - это как из пушки по воробьям :)

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Все мы формируемся своим опытом и взглядами

  • @bolnoi8
    @bolnoi83 жыл бұрын

    Старая противная LiveData, новая крутая flow, а я всё ещё на Rx сижу...

  • @AndroidBroadcast

    @AndroidBroadcast

    3 жыл бұрын

    Rx рабочая штука, только по мне всегда была слишком сложной и некоторые операторы неочевидны

  • @krokenstiv8777
    @krokenstiv87772 жыл бұрын

    вечно какую то херню придумывают и через полгода от нее отказываются.

  • @AndroidBroadcast

    @AndroidBroadcast

    2 жыл бұрын

    LiveData никто не предлагает заменить и она прекрасно может выполнять свою функцию дальше, но есть те кто хочет проводить через Coroutine всё. Вот этот ролик для таких людей

  • @user-xv7dc9hp6m
    @user-xv7dc9hp6m3 жыл бұрын

    В lifecycleScope.launchWhenStarted нужно вызывать launchIn(this) вместо launchIn(lyfecycleScope), а не collect(), тогда он не будет блокировать поток выполнения и можно подписаться на несколько Flow в одном скоупе.

Келесі