关于android:一年时间过去了LiveData真的被Flow代替了吗-LiveData会被废弃吗

前言:在去年的这个时候,谷歌官网举荐应用 Flow 代替LiveData,一年工夫过来了,我置信还是有很多android开发的敌人和我一样有以下几个问题:Android开发人员须要从 LiveData 迁徙到 Kotlin Flows 吗?LiveData 当初是否已弃用?

🌟官网文档:https://developer.android.goo…

🌟举荐浏览:https://zhuanlan.zhihu.com/p/…

🌟举荐浏览:https://juejin.cn/post/697900…

通过浏览本文你能理解到或学到什么:

  • Flow, Shared flow & State flow的应用(具体操作本文就不多说了,给大家举荐好文)
  • SharedFlowStateFlow,它们也有本人的可变类型——MutableSharedFlowMutableStateFlow,比照LiveData我到底用哪一个?
  • ③咱们曾经有了Flow,为啥还会有SharedFlowStateFlowFlow不够用吗?
  • ④我要迁徙到Flow吗?

有人问:LiveData是不是真的快要被废除了。LiveData:你是成心找茬?

我要迁徙到Flow吗?

咱们先来答复这个大家最关怀的问题

🚀论断:如果 LiveData 满足您的需要,那么就不急于替换它,如果是一个新我的项目,举荐在 UI 中用 LiveData,在Repo层 中用 Flow。

上面请观赏RxJavaLiveData&Flow的爱恨情仇:

在2017年之前,大家都是应用RxJava去配合Retrofit实现网络申请,RxJava实现事件订阅。然而,谁用谁晓得 (真的简单,各种线程的切换,头脑爆炸,不过,当初用协程就能够啦😻) 。因为是真的简单,对大部分开发者不是很敌对,于是在2017年那样的环境下,谷歌推出了LiveData。然而LiveData的性能却齐全能够应用RxJava来实现,那么谷歌为啥还要费那么大劲整这么个库进去呢?当然是因为LiveData比较简单啦~(而且RxJava不是谷歌本人的货色,谷歌:我可不想当大冤种😂)。于是在之后的一段时间中,对于简略场景大家开始应用LiveData了,对于简单的场景大家还是在应用RxJava。因为LiveData驾驭不了简单场景啊。(LiveData:我太难了😭)。不过好在,Flow呈现了。Flow:LiveData老弟别怕,大哥给你撑腰来啦!(其实我来代替你来了,嘿嘿)至今,它们之间的爱恨情仇还在持续…..

援用 扔物线(朱凯)大佬的话:协程的 Flow 和 RxJava 的性能范畴十分类似——其实我感觉就是一样的——然而 Flow 是协程里必不可少的一部分,而协程是 Kotlin 里必不可少的一部分,而 Kotlin 是 Android 开发里必不可少的一部分——哦这个说的不对,从新说——而 Kotlin 又是 Android 当初主推的开发语言以及将来的趋势,这样的话,Flow 一进去,那就没 LiveData 什么事了。别说 LiveData 了,当前 RxJava 也没什么事了。

LiveData会被废除吗?

LiveData会因为Flow而被废除吗?尽管官网始终在举荐应用Flow代替LiveData,然而在GDG的社区中的答案和多位国内外的GDE口中的答案是:不会被废除!

起因有两点:

  • 在简略的场景下应用LiveData曾经够了,而且LiveData比较简单,上手快,RxJava学习老本真的很高😭,Flow也绝对没有那么简略。
  • Flow 是协程的货色,如果你用的是Java来开发Android,那么你没有方法应用Flow。而且当初招聘平台至多有50%以上的Android岗位还在应用Java,所以LiveData不会被废除!

总结:如果不须要应用到 Kotlin 数据流的弱小性能,就用 LiveDataFlow是比LiveData更好,然而在特定的场景下LiveData更适合!

SharedFlow 和 StateFlow,比照LiveData我到底用哪一个?

外围:LiveData 实用于 MVVM,但不适用于 MVI

MVI中,View通过触发事件与ViewModel通信,而后在ViewModel的外部解决完这些事件后,收回新的ViewState并更新UI。而且应用LiveData解决视图状态非常简单,能够同时用于MVVMMVI,然而当咱们想要像以前一样显示一个简略的Snackbar时问题就来了。如果咱们应用LiveEvent类,那么整个单向状态流就会受到烦扰,因为咱们只是在ViewModel中触发了一个事件来与UI交互,但它应该是相同的。而应用StateFlowSharedFlow则能够解决这个问题。

StateFlowLiveData 有相似之处,两者都是可察看的数据持有者类,它们的不同在于StateFlow须要将初始状态传递给构造函数,而 LiveData 不须要。当视图进入 STOPPED 状态时,LiveData.observe() 会主动勾销注册消费者,而 StateFlow不会主动进行收集。如果想要实现雷同的性能的话,须要在Lifecycle.repeatOnLifecycle中收集流。

SharedFlowStateFlow 之间的次要区别在于,StateFlow 通过构造函数获取一个默认值,并在有人开始收集时便立刻收回,而 SharedFlow 不承受任何值,默认状况下什么也不收回。

咱们曾经有了Flow,为啥还会有SharedFlow、StateFlow。Flow不够用吗?

StateFlow 和 SharedFlow 是 Flow API,它们使流可能以最佳的形式收回状态更新,并向多个消费者收回音讯。

单单一个Flow当然是不够的啦

  1. Flow是无状态的,它没有 .value属性。它只是一个能够收集的数据流。
  2. Flow是申明性的(冷流)。它仅在收集时实现,并且对于每个新收集器都会创立一个新流。对于拜访数据库和其余不用每次都反复的操作,这不是一个好的抉择。
  3. Flow原本是不晓得Android的生命周期,然而起初能够通过向LifecycleCoroutineScope增加扩大办法launchWhenStarted来解决,但大多数人不晓得如何正确应用它。而且因为Flow有一个订阅计数属性,当Lifecycle.Event达到ON_STOP时该属性不会扭转。这意味着Flow将在内存中依然处于活动状态,就会可能导致内存透露!

想要学会如何应用Flow?那你能够来看看这些文章

有小伙伴说看不懂 LiveData、Flow、Channel,跟我走 —— Jetpack 系列(4) — 文章起源掘金 丨大麦

从 LiveData 迁徙到 Kotlin 数据流 — 文章起源掘金Android_开发者

Android 架构之 MVI 高级体 | Flow 替换 LiveData 重构数据链路 — 文章起源掘金唐子玄

尾述

看完这篇文章,置信你的心中曾经有了属于本人的答案。还是那句话,不肯定要最好的,然而要最合适的!因为我自己能力也无限,文章也是在浏览了网上的大量文章后和几位Android开发者一起探讨进去的,文章有不对的中央欢送指出,有问题欢送在评论区留言探讨~

对于我

Hello,我是Taxze,如果您感觉文章对您有价值,心愿您能给我的文章点个❤️,也欢送关注我的博客。

如果您感觉文章还差了那么点货色,也请通过关注督促我写出更好的文章——万一哪天我提高了呢?😝

根底系列:

2022 · 让我带你Jetpack架构组件从入门到精通 — Lifecycle

学会应用LiveData和ViewModel,我置信会让你在写业务时变得轻松🌞

当你真的学会DataBinding后,你会发现“这玩意真香”!

Navigation — 这么好用的跳转治理框架你确定不来看看?

Jetpack Room — 给你一种新的数据库操作体验!

以下局部还在码字,连忙点个珍藏吧🔥

2022 · 让我带你Jetpack架构组件从入门到精通 — Paging3

2022 · 让我带你Jetpack架构组件从入门到精通 — WorkManager

2022 · 让我带你Jetpack架构组件从入门到精通 — ViewPager2

2022 · 让我带你Jetpack架构组件从入门到精通 — 登录注册页面实战(MVVM)

进阶系列:

一年工夫过来了,LiveData真的被Flow代替了吗?(本文🌟)

协程 + Retrofit网络申请状态封装

Room 缓存封装

…..

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理