乐趣区

关于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 缓存封装

…..

退出移动版