冷流和热流
冷流:在不调用终端操作符的情况下,Flow的构建块代码是不会执行的,每一个消费者调用一次Flow,则构建块的代码会从头到尾执行一次
热流:热流可以不依赖消费者存货,可以在流之外生成数据,然后传递给流
flow 是冷流 不允许从其他上下文发射emit StateFlow与SharedFlow是热流
StateFlow:适合需要维护可观察可变状态的类,不关心消费者是否消费完毕上一个值。适用于状态
SharedFlow:可以保存旧数据,回播 ,会挂起知道,最后一个订阅者处理完成事件,才会发射下一个值,适合时间消费
叫流的名称很贴切,就像一根水管,从上游流向下游,在学习的过程中,脑海里可以一直有这个概念,中间很多操作函数,可以想象成水处理装置,类似与大坝,隘口之类
flow 构建块的代码可以挂起
emit 发射值
collect 收集值
map 变换
filter 过滤
transform 一个高级的变化,可以发射任意次
take 防止流过长,取前几个
flowOn 更改发射流的上下文
buffer 缓冲 发送快 处理慢 可以使用缓冲处理
conflate 可以用于跳过中间值,直接处理最后一个结果
collectLatest 发射器和收集器都很慢,合并加快处,通过删除发射值来实现,同样处理最后一个结果
zip 合并流处理
combine 当流速不同的时候,每当上流产生新值就重新计算
flatMapConcat 流嵌套 阻塞 等待完成后开始收集下一个
flatMapMerge 流嵌套 并发 并发收集所有的流,并合并到一个单独的流中
flatMapLatest 流嵌套 中断 当发出新流后立即取消先前流的收集
catch 收集上流的异常 并中断流
onCompletion 收集上流的异常 但是不中断流
launchIn 在单独的协程中启动流的收集
cancel 在收集函数内调用cancel 可以取消流
cancellable 该流检查每次发出流的取消状态,并在流收集器被取消时显示相应的取消原因
此篇文章旨在于个人整理笔记使用,[来对对官网文档的学习](异步流 · Kotlin 官方文档 中文版)