LiveData 迁移到 Kotlin Flow详解

LiveData ,是Android 2017推出的一个东西,配合MVVM使用。观察者模式,的确简化了我们的工作方式,但 RxJava 等选项,对于当时的初学者来说实在是太复杂了。因此 Architecture Components 团队创建了 LiveData :这是个非常 “有主见的” 可观察数据持有者类,并且是专门为 Android 设计的。它保持简单明了,这让它易于上手,建议是将 RxJava 用于更复杂的 响应流 案例,以充分利用这两者之间的整合。

一、死数据

LiveData 仍然是我们 针对 Java 开发人员、初学者和简单情况的解决方案。对于其余部分,一个不错的选择是迁移到 Kotlin Flows。Flows 仍然有一个陡峭的学习曲线,但它们是 Kotlin 语言的一部分,由 Jetbrains 提供支持;Compose 即将到来(已到来),它非常适合响应式模型。

一段时间以来,我们一直在讨论使用 Flows 连接 app 的不同部分,但 view 和 ViewModel 除外。现在我们有了更安全的方法从 Android UI 收集 flows,我们可以创建一个完整的迁移指南。

在这篇文章中,您将学习如何将 Flows 暴露给view、如何收集它们,以及如何对其进行微调,以满足特定需求。

二、Flow

支持布局动态化和逻辑动态化开源社区活跃LiveData 做了一件很漂亮的事儿:它 公开数据,同时缓存最新值,并知晓 Android 的生命周期。后来我们了解到它也可以 启动协程,并 创建复杂的转换,但这就有点复杂了。

让我们看一些 LiveData 模式及其 Flow 等效

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/667618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go 函数 可变参数

有的时候,我们定义函数,都是形参固定,有时候我们并不知道参数有多少个,这里我们就可以用... 来使用可变参数 代码如下: package main import "fmt"//定义一个函数,函数的参数为:可变…

AI时代,人才的“重新定义”

参加一个讨论,梳理一下自己所理解到一些内容,有不对的请指正: 我们要好好借助AI工具成为一个π型人才,π型人才 是指至少拥有两种专业技能,并能将多门知识融会贯通的高级复合型人才。 π下面的两竖指两种专业技能&…

全自动网页生成系统重构版源码

全自动网页生成系统重构版源码分享,所有模板经过精心审核与修改,完美兼容小屏手机大屏手机,以及各种平板端、电脑端和360浏览器、谷歌浏览器、火狐浏览器等等各大浏览器显示。 为用户使用方便考虑,全自动网页制作系统无需繁琐的注…

PMP资料怎么学?PMP备考经验分享

PMP考试前大家大多都是提前备考个一两个月,但是有些朋友喜欢“不走寻常路”,并不打算去考PMP认证,想要单纯了解PMP,不管要不要考证,即使是仅仅学习了解一下我个人都非常支持,因为专业的基础的确能提高工作效…

基恩士 KV-8000 PLC通讯简单测试

1、KV-8000通讯协议 基恩士 KV-8000 PLC支持多种通讯方式,包括:OPC UA、Modbus、上位链路命令等。其中OPC UA需要对服务器和全局变量进行设置,Modbus需要调用功能块。默认支持的是上位链路命令,实际是一条条以回车换行结束的ASCII…

基于微信小程序的医保行政执法案件管理系统

本系统设计的是一个医保行政执法的网站,此网站使用户实现了不需出门就可以在手机或电脑前进行网上查询需求信息等。 用户在注册登陆后,在客户端可以实现;案件信息、结案归档、我的等。然而管理员则可以在服务端直接管理;个人中心、…

【已解决】Oracle 12541 TNS 无监听程序

目录 1、找到Oracle监听服务(OracleOraDb10g_homeTNLListener),停止运行 2、首先查看监听文件是否超过4G 3、修改配置文件 连接oracle突然报错,提示Oracle 12541 TNS 无监听程序,可以按照以下步骤解决 1、找到Ora…

Redis-布隆过滤器解决穿透详解

本文已收录于专栏 《中间件合集》 目录 背景介绍概念说明原理说明解决穿透安装使用安装过程Redis为普通安装的配置方式Redis为Docker镜像安装的配置方式 具体使用控制台操作命令说明Spring Boot集成布隆过滤器 总结提升 背景介绍 布隆过滤器可以帮助我们解决Redis缓存雪崩的问题…

Fink CDC数据同步(四)Mysql数据同步到Kafka

依赖项 将下列依赖包放在flink/lib flink-sql-connector-kafka-1.16.2 创建映射表 创建MySQL映射表 CREATE TABLE if not exists mysql_user (id int,name STRING,birth STRING,gender STRING,PRIMARY KEY (id) NOT ENFORCED ) WITH (connector mysql-cdc,hostn…

算法学习打卡day47|单调栈系列题目

单调栈题目思路 通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。时间复杂度为O(n)。单调栈的本质是空间换时间,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元…

链式二叉树(三种遍历)

1.链式二叉树的遍历:前序(根,左子树,右子树)中序(左子树,根,右子树)后序(左子树,右子树,根)层序(一层一层访问…

探索深度学习的边界:使用 TensorFlow 实现高效空洞卷积(Atrous Convolution)的全面指南

空洞卷积(Atrous Convolution),在 TensorFlow 中通过 tf.nn.atrous_conv2d 函数实现,是一种强大的工具,用于增强卷积神经网络的功能,特别是在处理图像和视觉识别任务时。这种方法的核心在于它允许网络以更高…

Flask 入门6:模板继承

一个网站中,大部分网页的模块是重复的,比如顶部的导航栏,底部的备案信息。如果在每个页面中都重复的去写这些代码,会让项目变得臃肿,提高后期的维护成本。比较好的做法是,通过模板继承,把一些重…

电脑文件误删除怎么办?8个恢复软件解决电脑磁盘数据可能的误删

您是否刚刚发现您的电脑磁盘数据丢失了?不要绝望!无论分区是否损坏、意外格式化或配置错误,存储在其上的文件都不一定会丢失到数字深渊。 我们已经卷起袖子,深入研究电脑分区恢复软件的广阔领域,为您带来一系列最有效…

合并排序算法

合并排序依赖于合并操作,即将两个已经排序的序列合并成一个序列,具体的过程如下: 1申请空间,使其大小为两个已经排序序列之和,然后将待排序数组复制到该数组中。 2设定两个指针,最初位置分别为两个已经排…

如何标准化地快速编辑文档

介绍个公文类的文档技巧吧,尤其在国企、机关、有ISO管理体系内控要求的会议记录、公文写作等,要求大同小异,一般都是中规中矩的【GB/T 9704—2012】,其实国标本身就是经过长期检验,证明是最规范合理,阅读效…

深度学习介绍

对于具备完善业务逻辑的任务,大多数情况下,正常的人都可以给出一个符合业务逻辑的应用程序。但是对于一些包含超过人类所能考虑到的逻辑的任务,例如面对如下任务: 编写一个应用程序,接受地理信息、卫星图像和一些历史…

Java 中 ExceptionInInitializer 错误

在这篇文章中,我们将了解Java中的 ExceptionInInitializerError。 Java中 ExceptionInInitializerError 简介 ExceptionInInitializerError 是 Java 中的未经检查的异常,它是 Error 类的子类。 它属于运行时异常的类别。 在 Java 中,每当 J…

python爬虫代码示例:爬取京东详情页图片【京东API接口】

一、Requests请求示例【京东API接口】 爬虫爬取网页内容首先要获取网页的内容,通过requests库进行获取。 安装 pip install requests 示例代码 import requests url "http://store.weigou365.cn"res requests.get(url)res.text 执行效果如下&#x…

大数据 - Spark系列《三》- 加载各种数据源创建RDD

Spark系列文章: 大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 目录 3.1🧀加载文件(本地) 1. 加载本地文件路径 🌮使用te…