| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 浅谈 Android MVVM 需要用 Flow 代替 LiveData 吗? -> 正文阅读 |
|
[移动开发]浅谈 Android MVVM 需要用 Flow 代替 LiveData 吗? |
浅谈 Android MVVM 需要用 Flow 代替 LiveData 吗?前言Android开发:我刚学会的 LiveData 这么快就要被代替了? 先说结论:个人认为当前项目的架构正在使用 LiveData 并不需要完全用 Flow 代替,部分 LiveData 无法完美解决的场景,亦或是当 Flow 能有效解决实际开发中的问题时,可以接入 Flow 来更好的完成。 LiveData2017年 Google 官方推出了 LiveData。如果让我来简单说说 LiveData 是什么,我只有一句话:LiveData 实现了变量可以被订阅,且数据更新发生在主线程(非常适合刷新UI界面)。当然,在 LiveData 出现之前,RxJava 可以完全胜任这项功能。LiveData 的推出简化了大部分简单场景的开发成本、学习成本,简单易用。复杂的场景:背压等等,还是需要使用 RxJava 来实现。 为什么要用 Flow 代替 LiveData首先我要说明,LiveData 并不是一个不好的组件,他只是不够强大,你用 LiveData 搭建响应式编程架构是可以的,但是会有一些场景需要注意:
综上所述,我们并不用着急从当前项目中摘除 LiveData,他仍然可以作为响应式编程的架构组件,只是更复杂的场景(数据处理,多个请求合并等等)使用 Flow 来实现更合适。 Flow 是什么?Flow 是属于 Kotlin 协程中的一部分,和 RxJava 十分相似同样是响应式编程模型,同样可以切换线程,支持背压操作,拥有很多强大的操作符,配合 JetPack 系列组件使得 Flow 的上手相比于 RxJava 就容易多了。 一段代码就能让你认识到 Flow 和 RxJava 的相似:
输出结果: 更多关于 Flow 的源码分析在此处不多做分析,后续随缘更新关于 Flow 的相关博客。 Flow 的操作符了解了 Flow 是什么之后 就该看看他强大的操作符了,这里举例几个比较经典的操作符。 map() filter() zip()
输出结果: 背压操作消费者模式中,上下游的速率不同时,当上游生产过快但消费者消费慢时,就会出现数据的积压。
输出结果:
输出结果:
输出结果:
一共接受两个参数,第一个参数 capacity 是调整积压容量的,默认值 BUFFERED 我们点进去源码看一下:
Flow 如何代替 LiveData想比于 LiveData ,Flow 欠缺了声明周期感知,那当界面不可见(切换页面,app进入后台等)仍然在订阅上游数据就造成了性能、电量等问题。Flow 如何感知生命周期呢?Flow是属于 Kotlin 协程的一部分,Google 为了让我们使用携程更顺手退出了一系列 KTX扩展库,Lifecycle 提供的一系列协程启动的方法就包括 lifecycleScope.launchWhenX:
Flow 也提供了 asLiveData 方法将 Flow 转化为一个 LiveData
最后这篇博客主要对 Flow 进行了一点入门的了解,下篇博客讲用实战中的代码(Flow + Retrofit)搭建一套 MVVM 规范的网络请求模块。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 23:48:14- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |