首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Kotlin 协程】Flow 流展平 ( 连接模式 flatMapConcat | 合并模式 flatMapMerge | 最新展平模式 flatMapLatest )

    文章目录 一、Flow 流展平 1、连接模式 flatMapConcat 代码示例 2、合并模式 flatMapMerge 代码示例 3、最新展平模式 flatMapLatest 代码示例 一、Flow...* * 请注意,尽管这个操作符看起来非常熟悉,但我们不鼓励在常规的特定于应用程序的流中使用它。 * 最有可能的是,暂停[map]操作符中的操作就足够了,线性转换更容易推理。...* * 请注意,尽管这个操作符看起来非常熟悉,但我们不鼓励在常规的特定于应用程序的流中使用它。 * 最有可能的是,暂停[map]操作符中的操作就足够了,线性转换更容易推理。...* * @param并发控制运行中的流的数量,最多收集[concurrency]个流 * 同时。默认情况下,它等于[DEFAULT_CONCURRENCY]。...*/ @FlowPreview public fun Flow.flatMapMerge( concurrency: Int = DEFAULT_CONCURRENCY,

    1.3K20

    实战 | 使用 Kotlin Flow 构建数据流 管道

    △ 单向数据绑定 使用 Flow 可以想象对于这些组合和转换来说,我们需要一个成熟的工具来完成这些操作。在本文中我们将使用 Kotlin Flow 来实现。...我们使用数据流构建器来创建数据流,因为 Flow 是在协程上下文环境中运行的,它以挂起代码块作为参数,这也意味着它能够调用挂起函数,我们可以在代码块中使用 while(true)来循环执行我们的逻辑。...在示例代码中,我们首先从 API 获取消息,然后使用 emit 挂起函数将结果添加到 Flow 中,这将挂起协程直到收集器接收到数据项,最后我们将协程挂起一段时间。...在 Flow 中,操作会在同一个协程中顺序执行,使用 while(true) 循环可以让 Flow 持续获取新消息直到观察者停止收集数据。传递给数据流构建器的挂起代码块通常被称为 "生产者代码块"。...Kotlin Flow 构建您的基础设施。

    1.5K10

    Google 推荐在 MVVM 架构中使用 Kotlin Flow

    Kotlin Flow 是什么? Kotlin Flow 解决了什么问题? Kotlin Flow 如何在 MVVM 中使用?...Google 推荐在 MVVM 中 使用 Kotlin Flow Google 推荐在 MVVM 中使用 Kotlin Flow我相信如今几乎所有的 Android 开发者至少都听过 MVVM 架构,在...有以下优点: Flow 支持线程切换、背压 Flow 入门的门槛很低,没有那么多傻傻分不清楚的操作符 简单的数据转换与操作符,如 map 等等 Flow 是对 Kotlin 协程的扩展,让我们可以像运行同步代码一样运行异步代码...,使得代码更加简洁,提高了代码的可读性 易于做单元测试 Kotlin Flow 如何在 MVVM 中使用 Jetpack 的视图模型 MVVM 架构由 View + DataBinding + ViewModel...Kotlin Flow 在 Repositories 中的使用 如果我们想在 Flow 中使用 Retrofit 或者 Room 进行网络请求或者查询数据库的操作,我们需要将使用 suspend 修饰符的操作放到

    4.4K21

    解决Android开发中的痛点问题用Kotlin Flow

    前言 本文旨在通过实际业务场景阐述如何使用Kotlin Flow解决Android开发中的痛点问题,进而研究如何优雅地使用Flow以及纠正部分典型的使用误区。...LiveData的粘性机制会带来副作用,但这本身并不是LiveData的设计缺陷,而是对它的过度使用。 Kotlin Flow是基于kotlin协程的一套异步数据流框架,可以用于异步返回多个值。...考虑使用kotlin协程中的Channel替代。...但实际上答案并不绝对,通过在flow构造器内部使用channel,同样可以实现动态发射,如channelFlow。...使用Flow还能给我们带来什么 比Rxjava更简单,比LiveData更多的操作符 如使用flowOn操作符切换协程上下文、使用buffer、conflate操作符处理背压、使用debounce操作符实现防抖

    3.3K20

    Kotlin Jetpack Paging3 和Flow结合使用注意点

    在用DataBinding时要注意DataBinding访问的是静态方法 在Kotlin中就要用companion object和@JvmStatic class ImageViewBindingAdapter...} } } } Paging3分页数据错乱的问题 在计算paging的prevKey和nextKey,也就是上一页,下一页的时候,需要考虑PagingConfig中的...= null //PagingConfig中的2个参数 val realPageSize = 8 val initialLoadSize = 16...initialLoadSize=8,prefetchDistance=1时 解决办法也比较简单,2个属性设置的大一点就行了 APP横竖屏切换之后paging加载的数据没有缓存起来 ViewModel缓存数据要在属性中...还有就是Paging返回的是flow,需要用cachedIn(viewModelScope)来让Paging的flow的生命周期和ViewModelScope的生命周期保持一致,也就是和activity

    12010

    Kotlin Flow响应式编程,操作符函数进阶

    那么Kotlin Flow的操作符函数也是类似的,虽然它没有RxJava那么多,但是着实也不少。...本篇文章我会尽可能将最常用的操作符函数全部覆盖到,那么学完本篇文章之后,在绝大部分Kotlin Flow的操作符函数使用场景中,你应该都可以比较得心应手了。...runBlocking代码块,它的作用是提供协程作用域给稍后的Flow使用,并且在代码块中的所有代码执行完之前阻塞当前线程。...在很多编程语言里面都有内置的map函数,甚至Kotlin自己就有。RxJava中也有map这个操作符函数,所以我们在Flow中第一个介绍它简直就是理所应当的事情。...{ println(it) } } } 这里使用zip函数连接了两个flow,并且在zip的函数体中将两个flow中的数据进行了拼接。

    1.2K20

    kotlin--Flow的运用

    Flow是kotlin提供的一个工具,使用协程封装成生产者-消费者模式,上流来负责生产,下流来接收消耗。...一、Flow的使用 1.Flow的创建 1.可以使用flow构建函数构建一个Flow类型返回值的函数 2.flow{}构建体中可以调用挂起函数,即上流 3.上流使用emit函数发射值 4.下流使用...6.除了使用子协程执行上流外,我们还可以使用launchIn函数来让Flow使用全新的协程上下文 fun main() { runBlocking { flow {...的取消检测 之前我们调用子协程的取消时,CPU密集型代码并不能结束运行,在不使用挂起函数的情况下,我们在子协程体中通过ensureActive函数来检测该协程是否被取消了 1.而Flow为了方便,Flow...和flatMapConcat不同,flatMapConcat是按流函数体中顺序执行,而flatMapMerge中遇到发射函数时,会一次性执行上流的所有发射 fun main() { runBlocking

    67620

    Coroutine(协程)(二)

    为了表示异步计算的值流(stream),我们可以使用 Flow 类型 fun simple(): Flow = flow { // 流构建器 for (i in 1..3) {...flow { ... } 构建块中的代码可以挂起。 函数 simple 不再标有 suspend 修饰符。 流使用 emit 函数 发射 值。 流使用 collect 函数 收集 值。...以下示例展示了当 withTimeoutOrNull 块中代码在运行的时候流是如何在超时的情况下取消并停止执行其代码的: fun simple(): Flow = flow { for...通常,withContext 用于在 Kotlin 协程中改变代码的上下文,但是 flow {...}...构建器中的代码必须遵循上下文保存属性,并且不允许从其他上下文中发射 emit 如下段代码所示 fun simple(): Flow = flow { // 在流构建器中更改消耗 CPU

    56510

    XTask与Kotlin Coroutine的使用对比

    背景 XTask是我基于RxJava的设计思想,并结合实际项目中使用的经验所创造出来的一个开源项目,其目的就是要代替RxJava在Android中的部分使用场景,提升开发的体验和可维护性。...20世纪50年代,目前主流的语言如python、C++和go语言对于协程都有支持和实现;最后,这世上从来就没有一本万利的框架,任何不谈使用场景的技术吹捧,都是在耍流氓。...Flow写法 Kotlin Flow是Kotlin Coroutine生态的一部分,必须依托其才能使用。...Flow写法 和RxJava类似,在Kotlin Flow中执行并行任务,一般使用flatMapMerge和zip的组合方式,对任务流进行合并。...上手难度 1.如果抛开kotlin Flow不谈的话,Kotlin Coroutine上手还是相对比较容易的。相比于RXJava而言,可能更适合我们Android开发。

    93240

    Android数据库高手秘籍(十),如何在Kotlin中更好地使用LitePal

    ' } 而如果你使用的是Kotlin,那么就在build.gradle中引入如下配置: dependencies { implementation 'org.litepal.android:kotlin...一次不可思议的升级 从上述文章中我们都可以看出,Kotlin版的代码普遍都是比Java代码要更简约的,Google给出的官方统计是,使用Kotlin开发可以减少大约25%以上的代码。...这样的话也就不存在什么泛型擦除的问题了,因为Kotlin在编译之后会直接使用实参替代内联方法中泛型部分的代码。 简单点来说,就是Kotlin是允许将内联方法中的泛型进行实化的。...T.class这样的语法在Java中是不可能的,而在Kotlin中借助泛型实化功能就可以使用T::class.java这样的语法了。...而通过刚才泛型实化部分的讲解,我们知道Kotlin中是可以使用T::class.java这样的语法的,因此我在LitePal 3.0.0中扩展了这部分特性,允许通过指定泛型来声明查询哪张表中的内容。

    3.1K30

    【Kotlin 协程】Flow 异步流 ② ( 使用 Flow 异步流持续获取不同返回值 | Flow 异步流获取返回值方式与其它方式对比 | 在 Android 中使用 Flow 异步流下载文件 )

    文章目录 一、使用 Flow 异步流持续获取不同返回值 二、Flow 异步流获取返回值方式与其它方式对比 三、在 Android 中 使用 Flow 异步流下载文件 一、使用 Flow 异步流持续获取不同返回值...---- 在上一篇博客 【Kotlin 协程】Flow 异步流 ① ( 以异步返回返回多个返回值 | 同步调用返回多个值的弊端 | 尝试在 sequence 中调用挂起函数返回多个返回值 | 协程中调用挂起函数返回集合...: flow 构建器代码块中的代码 , 是可以挂起的 , 可以在其中调用 挂起函数 , 如 kotlinx.coroutines.delay 函数等 ; /** * 使用 flow...; 三、在 Android 中 使用 Flow 异步流下载文件 ---- Android 中主线程不可执行网络相关操作 , 因此只能在 子线程 中下载文件 , 可以在协程中使用 Dispatcher.IO...#emit 向主线程中发送进度值 , 在主线程中 , 可以 使用 Flow#collect 函数 收集 Flow 异步流中发射出来的数据 , 如 : 进度 , 捕获的异常 , 下载状态等 ; 完整流程

    1.6K11

    Git Flow规范在工作中的使用流程

    初试Git Flow 我们公司采用的就是选择 git flow 工作流程来方便持续集成。...上图描绘了 git flow 的分支管理流程,不懂没关系,我们再来白话一下。...工作流程 开始使用 Gitflow 之前,需要做一步一次性的初始化动作,就是从 master 分支上创建一个 develop 分支。...如果我们嫌弃自己来创建这些分支很麻烦,我们可以使用 Git Flow 工具,下载地址 https://github.com/nvie/gitflow/wiki/Installation 真的好用,这个玩意还有可视化版本的...功能相互独立,在每个发布的新版本中可以挑选想要发布的功能,同时可以支持我们持续发布新的功能。 更多、更合规的代码复查工作。 自动化测试、部署和交付到各个环境。

    1.5K30

    Kotlin中的常用类及其使用

    但建议类的初始化赋值可以放在这,其余的最好由其他专门的地方处理,采用init关键字 init{ println("ww cool") } 2.主构造函数 主构造函数只能由一个,初始化块相当于放在主构造函数的无参函数中,...按顺序执行初始化块,这一点和传统的面向对象编程中的主构造函数没有太大的区别。...由关键字constructor提供,一般情况省略此关键字 class MyClass (name:String){ } //或者使用关键字 class MyClass constructor...(name:String){ } 3.次构造函数 同样使用constructor关键字作为函数名,但它不能省略函数名,使用时需要调用主构造函数 class MyClass constructor...java语言差异比较大,需要注意一下,不过平时基本上不会用到自定义的setter和getter,所以不用这么担心 三、常用的类 抽象类 含有抽象方法的类称为抽象类,这一点和java里面很像 内部类 使用

    1.1K20

    Kotlin Flow 看这一篇 带你入门~

    为什么需要Flow 首先我们来回顾下Kotlin中我们如何使用挂起函数,我们在main方法中,调用挂起函数返回一组数据,代码如下所示: suspend fun loadData(): List...的操作符 类似集合的函数是Api,Flow中也有许多操作符,这里我们简单举几个例子: map 使用map我们可以将最终结果映射为其他类型,代码如下所示: fun changeData(value: Int...那么我们如何指定Flow代码块中的上下文呢,我们需要使用flowOn操作符,我们将Flow代码块中的代码指定在IO线程中,代码如下所示: fun loadData1() = flow { for...buffer操作符 我们在Kotlin 协程 看这一篇就够了 中曾了解过,协程可以提升并发请求的效率,而在Flow代码块中,每当有一个处理结果 我们就可以收到,但如果处理结果也是耗时操作,我们来看下需要多长时间来处理...还有Combine、flatMapConcat、flatMapMerge等操作符,这里就不再一一讲解了。

    1.4K30
    领券