前言:在去年的这个时候,谷歌官网举荐应用 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
的应用(具体操作本文就不多说了,给大家举荐好文) - ②
SharedFlow
和StateFlow
,它们也有本人的可变类型——MutableSharedFlow
和MutableStateFlow
,比照LiveData
我到底用哪一个? - ③咱们曾经有了
Flow
,为啥还会有SharedFlow
、StateFlow
,Flow
不够用吗? - ④我要迁徙到
Flow
吗?
有人问:LiveData是不是真的快要被废除了。LiveData:你是成心找茬?
我要迁徙到Flow吗?
咱们先来答复这个大家最关怀的问题
🚀论断:如果 LiveData 满足您的需要,那么就不急于替换它,如果是一个新我的项目,举荐在 UI 中用 LiveData,在Repo层 中用 Flow。
上面请观赏RxJava
与LiveData
&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 数据流的弱小性能,就用 LiveData
。Flow
是比LiveData
更好,然而在特定的场景下LiveData
更适合!
SharedFlow 和 StateFlow,比照LiveData我到底用哪一个?
外围:LiveData 实用于 MVVM,但不适用于 MVI
在MVI
中,View
通过触发事件与ViewModel
通信,而后在ViewModel
的外部解决完这些事件后,收回新的ViewState并更新UI。而且应用LiveData
解决视图状态非常简单,能够同时用于MVVM
和MVI
,然而当咱们想要像以前一样显示一个简略的Snackbar时问题就来了。如果咱们应用LiveEvent
类,那么整个单向状态流就会受到烦扰,因为咱们只是在ViewModel
中触发了一个事件来与UI
交互,但它应该是相同的。而应用StateFlow
和SharedFlow
则能够解决这个问题。
StateFlow
和 LiveData
有相似之处,两者都是可察看的数据持有者类,它们的不同在于StateFlow
须要将初始状态传递给构造函数,而 LiveData
不须要。当视图进入 STOPPED
状态时,LiveData.observe()
会主动勾销注册消费者,而 StateFlow
不会主动进行收集。如果想要实现雷同的性能的话,须要在Lifecycle.repeatOnLifecycle
中收集流。
SharedFlow
和 StateFlow
之间的次要区别在于,StateFlow
通过构造函数获取一个默认值,并在有人开始收集时便立刻收回,而 SharedFlow
不承受任何值,默认状况下什么也不收回。
咱们曾经有了Flow,为啥还会有SharedFlow、StateFlow。Flow不够用吗?
StateFlow 和 SharedFlow 是 Flow API,它们使流可能以最佳的形式收回状态更新,并向多个消费者收回音讯。
单单一个Flow当然是不够的啦
Flow
是无状态的,它没有 .value属性。它只是一个能够收集的数据流。Flow
是申明性的(冷流)。它仅在收集时实现,并且对于每个新收集器都会创立一个新流。对于拜访数据库和其余不用每次都反复的操作,这不是一个好的抉择。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 缓存封装
…..
发表回复