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

  Рет қаралды 29,243

Android Broadcast. Все об Андроид разработке

3 жыл бұрын

#AndroidBroadcast #Flow #Coroutines
Руководство по миграции с LiveData на StateFlow/SharedFlow при использовании архитектуры MVVM на основе Jetpack
📺 Важное обновление Lifecycle + Flow kzbin.info/www/bejne/qYaaaJSbrJaaj8U
🔗 Avito.Tech avito.tech/
🔗 Поддержать проект taplink.cc/android_broadcast/p/video-early-access/
🔗 Каналы "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
@AndroidBroadcast 3 жыл бұрын
🔗 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
@Nidvoraich 3 жыл бұрын
Сижу я такой, ищу видосы, чтоб вкурить работу с лайвдатой... Очень надеюсь, что Флоу не станет депрекейтет ещё до того, как я посмотрю это видео :)
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
LiveData вполне подходящая вещь. Видео - не призыв к миграции, а лишь руководство как это сделать, если вы хотите. В будущем буду делать такое вступление в начале ролика
@mukhtarbimurat5106
@mukhtarbimurat5106 3 жыл бұрын
Спасибо, очень полезно, ждем выпуск про MVI с функциональным программированием используя Flow
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Такого пока в планах нет, но вот Compose будет однозначно раскрываться
@arturmavlyuchenko7647
@arturmavlyuchenko7647 3 жыл бұрын
Долгожданный выпуск!
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Даже слишком. Мне стыдно, что моё обещание и реализация так растянулись по времени
@ivanvlasov8308
@ivanvlasov8308 3 жыл бұрын
Спасибо, Кирилл, очень полезно!
@heroachilles
@heroachilles 2 жыл бұрын
Благодарю, очень интересно!
@kafychannel
@kafychannel Жыл бұрын
спасибо за видео, Кирилл!
@GriNAME
@GriNAME 2 жыл бұрын
Спасибо за видео!
@codemachine19
@codemachine19 11 ай бұрын
харош харош мужик давай еще еще
@codingpas
@codingpas 3 жыл бұрын
Не гладя лайк
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Доверяй, но смотри до конца!
@Alexandr234
@Alexandr234 3 жыл бұрын
спасибо большое Кирилл!
@syoritohatsuki
@syoritohatsuki 2 жыл бұрын
Наконец-то пример миграции на простом приложении, а не на какой-то модели из жопиней с говно апи и предварительно закостыленым Retrofit и отголосками на DI
@user-sf8xx1hq7c
@user-sf8xx1hq7c 2 жыл бұрын
Крутое видео) спасибо
@sanek1985t
@sanek1985t 3 жыл бұрын
Какой-то оверинжениринг. Вроде простые вещи надо сделать, взять данные по сети или из бд или из нотифа и отобразить во вью . Теперь предлагается выкинуть лайвдата и использовать флоу с какими-то буферами итд. Хорошо бы объяснить на реальном примере какие проблемы решает флоу и почему это проще чем другие подходы и лучше. Спасибо
@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?
@sanek1985t
@sanek1985t 3 жыл бұрын
Автору, плиз, пригласите на интервью разработчиков популярных приложений и поговорите с ними об используемых там технологиях и почему и именно эти технологии. Будет реально интересно)
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Делайте конкретный предложения и я буду приглашать их, но не каждый готов таким поделиться. Например, разработчики Telegram как в танке сидят и отказались пообщаться
@swamp2113
@swamp2113 3 жыл бұрын
Спасибо за выпуск! Я для себя сделал экстеншен в стиле LiveData, так красивее выглядит: inline fun Flow.collectWhenStarted(lifecycleOwner: LifecycleOwner, crossinline action: suspend (value: T) -> Unit)
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Тоже хороший вариант
@tyt66612
@tyt66612 2 жыл бұрын
Весь день ломал голову как Flow закинуть в переменную и прослушивать значения этой переменной и наконец увидел, что есть функция emitAll() 👍
@deadchannal
@deadchannal 2 жыл бұрын
Было полезно
@user-gc4je3fl6p
@user-gc4je3fl6p 2 жыл бұрын
супер
@monkas2738
@monkas2738 3 жыл бұрын
Спасибо, отличное видео! Хотелось бы как нибудь увидеть видео про MVI, с выходом беты Compose это можно вместе связать.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Я думал над рассказом про Unidirectional Data Flow и о том какие именно архитектуры этому соответствуют. Сейчас в свободное время занимаюсь изучение Jetpack Compose
@MrMonyag
@MrMonyag 3 жыл бұрын
Вот еще бы я лайвкодинг на ютубе смотрел, это же для тех, кто не может в документацию! (сидит и смотрит, ставит лайк, оч хорошо, оч одобряет)
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Лайвкодинг должен быть как отрепетированное шоу быть, иначе это будет нудно (
@Chernov1984
@Chernov1984 3 жыл бұрын
почитай документацию после ... часов работы,,, включил видос между делом, 15 мин и есть некое представление о теме
@user-vz9gt6ug3z
@user-vz9gt6ug3z 3 жыл бұрын
Звук Топ
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Видна разница где писал на петличку и обычный микрофон (
@Mihaivanov
@Mihaivanov 3 жыл бұрын
Думаю, что правильнее назвать функцию collectWhenStarted, что явно сообщает о запуске flow. А также не лишним будет возвращать Job, которая возвращается функцией launchWhenStarted(). В итоге получается что-то вроде этого: fun Flow.collectWhenStarted(lifecycleScope: LifecycleCoroutineScope): Job { return lifecycleScope.launchWhenStarted { this@collectWhenStarted.collect() } }
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
collect - это стандартная suspend функция и не подразумевает под собой передачу Scope
@EpicRackBattle
@EpicRackBattle 3 жыл бұрын
Спасибо за выпуск ! Кирилл pagining 3 (RemoteMediator) есть в планах сделать гаид?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Да Paging 3 обязательно буду обозревать после стабильного релиза
@luckystrike91
@luckystrike91 2 жыл бұрын
10:17 эмм, но ведь lifecycleScope будет закрыт только при onDestroy? тоесть если активити перейдет в onStop, оно будет по прежнему получать сообщения и пытаться апдейтить ui. или я что-то не так понял или в коде ошибка...
@vadimmorozov30
@vadimmorozov30 3 жыл бұрын
было бы прикольно если бы заготовка валялась где то на гитхабе и я бы смог пройтись по шагам после сам) некий codelab'чик)
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Такой заготовки нет + нужно дополнительное время на ее подготовку, что будет затягивать работу над роликом (
@SuperMarkwel
@SuperMarkwel 3 жыл бұрын
за 20 минут узнал больше чем в универе
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
От такого грущу за универ (
@tequilaonelove
@tequilaonelove 3 жыл бұрын
Подскажите что за универы такие, которые андроид разработке учат, что-то интересно стало))
@user-jg4pk6bq2g
@user-jg4pk6bq2g 3 жыл бұрын
Крутое видео, спасибо) Кирилл, а можно в двух словах чем отличается flow от StateFlow&SharedFlow?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
- Flow холодный, SharedFlow - горячий - Flow имеет только одного подписчика, SharedFlow - нескольких - SharedFlow может хранить цепочку событий - SharedFlow является более эффективной заменой BroadcastChannel
@user-ir2qe2ue9y
@user-ir2qe2ue9y 3 жыл бұрын
Поясните пожалуйста, зачем промежуточная обёртка Flow из юзкейса в другой Flow во вьюмодели? Почему нельзя напрямую вызвать stateIn или sharedIn на возвращаемом Flow (usecase)?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Можно тайминг, где встречается это код, Так будет проще дать пояснение
@stanislavlatyshev2621
@stanislavlatyshev2621 2 жыл бұрын
Испортил красивое значение лайков 777. Спасибо за видео очень помогло. Хотелось бы больше по корутинам и flow.
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Уже в раннем доступе есть первый урок из курса по Kotlin Coroutines boosty.to/androidbroadcast/posts/48374c74-9420-4046-bebf-382ceb624e37?share=post_link
@artemchep
@artemchep 3 жыл бұрын
Не рекомендую так подписываться на Flow, это хоть и поставит его на паузу после onStop но не сделает неактивным! Если у вас там какая-то сложная логика и буферы то вполне вероятно что вы продолжите выполнять работу в фоне, иногда ее может накопиться прилично, особенно если вы уйдете глубоко по навигации.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Естественно все зависит от задачи и чего хочется достичь. Копи-паста до добра никогда не доводила )
@artemchep
@artemchep 3 жыл бұрын
@@AndroidBroadcast просто добрая половина сюда пришла именно за ней =)
@audiserg
@audiserg 3 жыл бұрын
А можно поподробней про usecase, может ссылочка найдется. Как то необычно, обычно даже в гуглопримерах, в зависимостях модели только репозитории. Я так понял это способ вынести логику из вьюмодели?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
UseCase - это из Clean Arhitecture и в множестве статей по ней это будет упоминаться. Вот например proandroiddev.com/why-you-need-use-cases-interactors-142e8a6fe576
@marattlepberghenov5786
@marattlepberghenov5786 3 жыл бұрын
Зачем использовать apply для mutableLiveData, если можно default значение положить в конструктор?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Пропустил появление этого конструктора. Уже давно переехал на Flow, поэтому и не помнил. Спасибо что рассказали
@alekseyorekhov9095
@alekseyorekhov9095 3 жыл бұрын
А есть ли какие-то приемущества flow над livedata кроме нижеприведённых Из аргументов пока вижу, только: 1. Используется не в главном потоке 2. стандартизировать потоки в data и presentation, использовать 1 технологию лучше чем 2 3. можно не сильно запариваться со стандартизацией в случае сложных кейсов где нужно знать предыдущий стейт (и там и там будет flow использования). Аргумент про то, что пакет не androidx, считаю не сильно зачётным ибо сама вьюмодель с пакетом androidx. Интересуюсь вдруг что-то не учёл, может ещё какие-то полезные фичи есть.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Ещё можно добавить что Flow имеет множество операторов, а также является мультиплатформенным подходом.
@alekseyorekhov9095
@alekseyorekhov9095 3 жыл бұрын
Упс, загуглил, уже есть вьюмодель на iOS/Android, тогда точно мигрировать имеет смысл, тем более не очень долго👍
@user-fm2jm2yd5n
@user-fm2jm2yd5n 3 жыл бұрын
А chanells сейчас в coroutine используется? или они все, ушли под капот?
@IgorLevkivskiy
@IgorLevkivskiy 3 жыл бұрын
Ну например если надо, чтобы событие(между корутинами) отработало только один раз только для одного консюмера
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Channels сейчас используются по их основному применению - общение между несколькими Coroutinе. Они будут использовать под капотом Flow в тех операторах где такое нужно. BroadcastChannle уже заменён SharedFlow, все операторы Channel тоже deprecated. Думаю что скоро уже все расчистят по основным API и будет видно конечный результат
@MRAzartx
@MRAzartx 3 жыл бұрын
Очень полезно и интересно. У меня одна не большая оговорка. Не скажу за всех, скажу за себя. Я недавно только начал заниматься андроидом, знания на уровне начала пути Джуна. Знаю что такое лайв дата и использовал ее, и в этом плане, первая часть видео с примерами на основе лайв даты была понятна, но вторая часть уже вызвала бОльшие затруднения в понимании. Было бы очень круто, если бы контент объяснялся немного проще, а в остальном - все очень круто.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Это была практическая демонстрация с минимум теории. Теория по этому вопросу заняла бы отдельное видео. Курс по Coroutine я думаю делать и там все будет рассказывать подробно
@SpinQuarK26
@SpinQuarK26 2 жыл бұрын
Интересные способы работы, только возникает резонный вопрос зачем переходить на Flow с LiveData? Особенно когда у тебя только одно значение приходит (обычный get запрос), а не поток
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Нет причины делать это обязательно, но мне нравится унификация работы в асинхронном стиле, множество оператор и отсутствие необходимости работы в главном потоке. Поэтому я предпочитаю унификацию на всех слоях через Flow
@Chernov1984
@Chernov1984 2 жыл бұрын
+
@__Minecraft_Poseidon__
@__Minecraft_Poseidon__ 3 жыл бұрын
Как с помощью Flow можно реализовать long polling?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Если хочется иметь единое глобальное место в приложение для этого, то можно все события приходящие класть в SharedFlow и на него уже будут подписываться в разных местах приложения. flow { ... } позволит добиться того же, только каждый подписчик станет слушать события от сервера независимо и создавать отдельное подключение
@wtf_nick
@wtf_nick 3 жыл бұрын
А как сделать что-то типа 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 событий подойдёт.
@Alexeytrn
@Alexeytrn 3 жыл бұрын
Вроде на ui рекомендуют прокидывать все еще live data. А до viewmodel уже котлиновские стримы. Хотя читал в твиттере, они хотят через пару недель представить что-то для работы со стримами на ui и таким образом полностью избавиться от livedata
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Да, там из-за особенностей работы LifecycleCoroutineScope. В видео я показал как стоит запускать сейчас, а в ближайшем будущем будут нормальной coroutineScope, соответствующие поведению LiveData с подписчиками
@gorshkoov
@gorshkoov 3 жыл бұрын
Кстати, StateFlow не стоит использовать с циклами. То есть если вы в цикле хотите подряд сделать несколько состояний, то промежуточные могут быть пропущены
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Не думал что так в цикле делают. Пропущены события по какой причине? Очень интерсно узнать
@gorshkoov
@gorshkoov 3 жыл бұрын
Я не нашёл явной причины. Но внутри есть метод distinctUntilChanges, который, вероятно и управляет этим поведением. Да и в целом, если говорить о состоянии, и если оно возникает очень часто, то имеет смысл заигнорировать его и показать только актуальное. Для потока данных как раз и надо SharedFlow брать
@divanlobkowski3473
@divanlobkowski3473 2 жыл бұрын
@@gorshkoov попробовал в цикле получить значения от 0 до 100, все приходят. Но, если эмитить в корутине, то придет только 0 и 100.
@kimdoc6351
@kimdoc6351 3 жыл бұрын
3 года изучаю Android разработку, не могу найти работу на позицию Junior, так же о себе, есть погашенная судимость, 26 лет, нет военного билета, как думаешь или думаете могу ли найти работу в ближайшее время ?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Мне трудно что-то сказать без оценки уровня твоих знаний, ожиданий. Возможно, живёте в маленьком городе. Ближе к концу лета в сентябре начнутся стажировки в компаниях - это ваш шанс.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Напиши мне в личку (почта есть в описании). Созвонимся и я попробую тебе подсказать как действовать
@artjomsalijevs8356
@artjomsalijevs8356 3 жыл бұрын
Не очень понимаю, в чем основной профит данной миграции?
@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 дал гиганский ппофит в этих вопросах. А тут профиты, да есть, но не настолько ярко выражены. Есть смысл миграции если бы лайв дату планировали снять с поддержки / задепрекейтить в будущем. Все таки миграция больших проэктов это дорого
@sanek1985t
@sanek1985t 3 жыл бұрын
Ребята, без стеба спрашиваю. Что будет с разработкой под андройд ? Все меняется чё то слишком быстро с неочевидными профитами. До коле ?! Это издевательство реально - апи устаревает с какой то нереальной скоростью, а значит и ваши знания и ваши инвестиции в изучение андройд. Когда делать приложения, если надо все время что то изучать ?! Прямо какой то 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 аппов - это такое говнолегаси, что переписать его будет стоить охулиарды
@user-ev6hk3mq7p
@user-ev6hk3mq7p 2 жыл бұрын
Люди добрые помогите! В переменную типа Flow присваиваю значение Flow из Room Далее выполняем collect по это переменной (теперь когда что-то измениться в БД сработает блок кода в collect) Теперь проблема, я меняю в переменной о которой шла речь выше, ее значение, и присваиваю новое значение Flow Далее выполняю collect Теперь у меня работают два collect, как отменить первый сбор?
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Пишите в t.me/android_broadcast_talks
@itgik
@itgik 3 жыл бұрын
LiveData умеет работать с dataBinding, ее можно использовать напрямую в xml layouat'ах. Есть ли такая поддержка у Flow? Это было бы очень здорово, чтобы полностью перейти на Flow
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Да, помойму в AS 4.2 такая возможность появилась
@bigsarg1813
@bigsarg1813 3 жыл бұрын
Я просто не доумеваю! кто ставит этим видео дизлайки?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Не всем заходит формат или я что-то сказал не так. Всегда открыт для критики, только конструктивной и аргементированной
@user-oc7py1vy6s
@user-oc7py1vy6s 3 жыл бұрын
Чем плоха 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
@Nidvoraich 3 жыл бұрын
Чтобы не было нагромождений в коде - я написал миллион экстеншенов. А тем, у кого в руках телефон шестилетней давности, сосать лапу с производительностью? Или это как-то равноценно оптимизируется?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Множество оптимизаций выполняет компиллятор Kolin, а также R8/ProGuard в релизных сборках. Заниматься написанием кода, который должен поддерживать старые слабые устройства непростая задача и мало у кого есть на нее ресурсы, так как это накладывает дополнительное время разработки и тестирования
@Nidvoraich
@Nidvoraich 3 жыл бұрын
@@AndroidBroadcast я в Андроид пришёл после программирования микроконтроллеров, где каждый бит на счету :) Для меня создать анонимный КЛАСС для выполнения одного действия - это как из пушки по воробьям :)
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Все мы формируемся своим опытом и взглядами
@bolnoi8
@bolnoi8 3 жыл бұрын
Старая противная LiveData, новая крутая flow, а я всё ещё на Rx сижу...
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Rx рабочая штука, только по мне всегда была слишком сложной и некоторые операторы неочевидны
@krokenstiv8777
@krokenstiv8777 2 жыл бұрын
вечно какую то херню придумывают и через полгода от нее отказываются.
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
LiveData никто не предлагает заменить и она прекрасно может выполнять свою функцию дальше, но есть те кто хочет проводить через Coroutine всё. Вот этот ролик для таких людей
@user-xv7dc9hp6m
@user-xv7dc9hp6m 3 жыл бұрын
В lifecycleScope.launchWhenStarted нужно вызывать launchIn(this) вместо launchIn(lyfecycleScope), а не collect(), тогда он не будет блокировать поток выполнения и можно подписаться на несколько Flow в одном скоупе.
Дибала против вратаря Легенды
00:33
Mr. Oleynik
Рет қаралды 4,7 МЛН
THE POLICE TAKES ME! feat @PANDAGIRLOFFICIAL #shorts
00:31
PANDA BOI
Рет қаралды 24 МЛН
Пробую самое сладкое вещество во Вселенной
00:41
В России ускорили интернет в 1000 раз
0:18
Короче, новости
Рет қаралды 1,7 МЛН
cute mini iphone
0:34
승비니 Seungbini
Рет қаралды 6 МЛН
Самый дорогой кабель Apple
0:37
Romancev768
Рет қаралды 83 М.