流
文章平均质量分 83
锐湃
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Kotlin 协程】Flow 流组合 ( Flow#zip 组合多个流 | 新组合流的元素收集间隔与被组合流元素发射间隔的联系 )
摘要:本文介绍了Kotlin协程中Flow流的zip组合操作。通过Flow#zip函数可以将两个Flow流合并,使用transform函数处理每对值。当流元素发射间隔不同时,合并后的流发射间隔以慢的流为准。示例展示了数字流和字符串流的合并过程,以及不同发射间隔(100ms和1000ms)下合并流的输出结果,验证了合并流会等待较慢流的特性。转载 2025-11-21 17:24:15 · 53 阅读 · 0 评论 -
【Kotlin 协程】Flow 异步流 ③ ( 冷流 | 流被收集时运行 | 流的连续性 )
本文介绍了Kotlin协程中Flow异步流的两个重要特性:冷流机制和流的连续性。冷流是指flow构建器中的代码仅在调用collect函数收集元素时才会执行,并通过示例展示了日志打印时机。流的连续性则体现在元素按照固定顺序从上游到下游传递,可以使用filter、map等操作符处理元素。文章通过两个代码示例分别演示了冷流的执行时机和流的顺序处理过程,展示了Flow异步流的核心工作机制。转载 2025-11-21 17:22:00 · 56 阅读 · 0 评论 -
【Kotlin 协程】Flow 流展平 ( 连接模式 flatMapConcat | 合并模式 flatMapMerge | 最新展平模式 flatMapLatest )
本文介绍了Kotlin协程中Flow流的三种展平操作模式:flatMapConcat(连接模式)、flatMapMerge(合并模式)和flatMapLatest(最新展平模式)。flatMapConcat按顺序连接两个流的所有元素;flatMapMerge同时合并多个流;flatMapLatest只保留最新的数据流,会取消之前的流。每种模式都提供了代码示例和执行结果,展示了不同展平方式下元素发射的顺序和时间间隔。这些展平操作适用于需要处理多个Flow流交互的场景。转载 2025-11-21 17:20:01 · 61 阅读 · 0 评论 -
Flow stateIn 和 shareIn的区别
Kotlin Flow中的stateIn和shareIn操作符指南 本文详细介绍了Kotlin Flow中stateIn和shareIn两个关键操作符的使用。stateIn适合管理持续状态(如用户登录状态),会保留最新值(.value);shareIn适合处理一次性事件(如Toast提示),可配置历史事件缓存(replay)。两者的核心区别在于:stateIn有当前值,新订阅者立即获取最新状态;shareIn无当前值,需通过collect接收数据,可配置replay缓冲策略。文章提供了实用选择口诀:&quo转载 2025-11-10 11:28:59 · 56 阅读 · 0 评论 -
Kotlin协程Flow使用
Kotlin协程Flow使用转载 2025-11-07 14:04:23 · 50 阅读 · 0 评论 -
Kotlin知识体系(七) : Flow线程控制、状态管理及异常处理指南
本文介绍了Kotlin Flow的线程调度、状态管理、生命周期管理和异常处理机制。在线程调度方面,通过flowOn操作符和协程上下文实现灵活线程切换。状态管理部分对比了StateFlow(状态持有)和SharedFlow(事件广播)的特性及使用场景。生命周期管理重点讲解了repeatOnLifecycle的机制,避免UI非活跃状态下的资源浪费。异常处理章节详细解析了catch、retry、retryWhen等操作符的精准控制策略,以及onCompletion的资源清理作用。文章还提供了与Jetpack Co转载 2025-08-05 15:30:48 · 135 阅读 · 0 评论 -
Kotlin知识体系(七) : Flow线程控制
本文介绍了Kotlin协程中Flow的线程切换控制方法。通过flowOn操作符可以灵活改变上游操作的执行线程(如使用Dispatchers.IO处理网络请求),而不影响下游操作。collect操作的线程由调用它的协程上下文决定(如viewModelScope默认在主线程)。同时,可以在收集时使用withContext切换线程处理耗时任务。合理结合flowOn和协程调度器能实现流畅的异步数据流处理,确保耗时操作在后台线程执行,UI更新在主线程完成。转载 2025-08-02 17:48:58 · 94 阅读 · 0 评论 -
StateFlow 全面替代 LiveData
摘要:本文全面解析了StateFlow替代LiveData的技术优势与迁移策略。通过对比表展示核心差异:StateFlow支持多平台、丰富操作符、灵活背压处理等特性,而LiveData仅限Android且功能简单。详细提供了基础迁移模板、UI层消费方式(含生命周期安全方案)、高级功能实现(如复杂状态管理、事件总线)及性能优化技巧(防抖、差异化更新)。针对测试策略、状态保存、Compose集成等场景给出解决方案,并建议新项目直接采用StateFlow架构,现有项目分模块渐进迁移。典型场景下可提升性能30%-5转载 2025-07-16 14:48:28 · 189 阅读 · 0 评论 -
Flow 流展平 ( 连接模式 flatMapConcat | 合并模式 flatMapMerge | 最新展平模式 flatMapLatest )
本文介绍了Kotlin Flow流的三种展平操作模式:flatMapConcat(连接模式)按顺序连接两个流的所有元素;flatMapMerge(合并模式)并发合并两个流的元素;flatMapLatest(最新模式)只保留最新数据,会取消前一个流。通过代码示例展示了每种模式的特点和输出结果:连接模式保持顺序但耗时较长,合并模式并发执行速度更快,最新模式会跳过中间值仅保留最新数据。这些操作符用于处理需要流间交互的场景,但作者建议在常规场景优先考虑简单的map操作。转载 2025-05-24 14:13:14 · 412 阅读 · 0 评论 -
Flow核心概念与与操作符指南
Flow是Kotlin中用于处理异步数据流的工具,分为冷流(Cold Stream)和热流(Hot Stream)。冷流按需触发,每次收集都会重新执行流逻辑,适用于一次性任务或需要重复触发的场景。热流则主动发射数据,多个消费者共享同一流实例,适用于实时状态同步或全局事件通知。Flow采用生产者-消费者模型,支持异步非阻塞操作和响应式编程,通过操作符(如map、filter、transform等)实现复杂的数据处理逻辑。Flow的构建方式包括flow{}、flowOf()和asFlow(),分别适用于自定义流转载 2025-05-23 20:11:37 · 241 阅读 · 0 评论 -
协程 - 热流 Channel、SharedFlow、StateFlow
本文主要介绍了Kotlin协程中的通信模式,特别是组播(Channel)和广播(SharedFlow)的概念及其使用方式。组播通过Channel实现,支持发送和接收数据,具有并发安全、公平性等特点,适用于协程间的通信。广播通过SharedFlow实现,支持多个订阅者同时接收数据,适用于事件广播场景。文章还详细介绍了Channel和SharedFlow的创建、遍历、转换等操作,并对比了组播和广播的适用场景。最后,文章提到StateFlow作为SharedFlow的特殊配置,用于管理状态数据,类似于LiveDa转载 2025-05-23 18:42:13 · 245 阅读 · 0 评论 -
Kotlin中冷流(Clod Flow)和热流(Hot Flow)
冷流(ColdFlow)和热流(HotFlow)是数据流处理中的两种不同模式。冷流按需触发,只有在调用collect()时才开始生产数据,每个订阅者都会触发完整的数据流从头开始,适用于需要独立数据源的场景,如网络请求或数据库查询。热流则主动发射数据,不管是否有订阅者,多个订阅者共享同一份数据流,但只能收到订阅后的数据,适用于需要共享实时数据的场景,如IM消息或用户定位更新。冷流像点播电影,每个观众从头开始看;热流像直播,中途进入的观众只能从当前内容转载 2025-05-22 14:44:12 · 305 阅读 · 0 评论 -
如何在compose中正确的collect数据,防止内存泄露
讲解了如何将冷流(Cold Flow)转换为热流(StateFlow)的过程,并详细介绍了SharingStarted.Lazily和SharingStarted.Eagerly的区别。SharingStarted.Lazily在订阅后开始发送数据,而SharingStarted.Eagerly则立即开始发送,但两者都不会自动停止。转载 2025-05-12 17:25:10 · 138 阅读 · 0 评论 -
SharedFlow 参数含义 replay等
MutableSharedFlow 是 Kotlin 协程库(Kotlin Coroutines)中的一个类,它是 SharedFlow 的可变版本,允许发射新的值。MutableSharedFlow 具有可变性,可以使用 emit 方法来发射新的值。版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。表示当新订阅者订阅时,会重放多少个最近发射的值。如果设置为正数,新的订阅者会接收到最近发射的这些值。: 额外缓冲区容量,默认值为 0。转载 2024-12-10 13:59:20 · 273 阅读 · 0 评论 -
防止 Kotlin Flow Collectors在ViewModel 中内存泄漏
在 Android ViewModel 中使用 Kotlin Flows 对于管理数据更新非常有用,但Flow.collect()使用不当可能会导致内存泄漏和性能问题。转载 2024-12-10 13:47:16 · 212 阅读 · 0 评论 -
解锁 combine 在 Android 开发中的应用
Kotlin 中的combine操作符是一个功能强大的工具,可以将多个流组合成一个流。在 Android 开发中,尤其是在使用 Jetpack Compose 时,它可以极大地简化状态管理和数据处理。本文将探讨combine操作符的用法和优点,并通过示例展示其在 Android 开发中的应用。转载 2024-09-14 13:24:02 · 1046 阅读 · 0 评论 -
Kotlin学习篇——MutableStateFlow
PS:知道kotlin的可以跳过这段,往下看Kotlin是一种静态类型的编程语言,由JetBrains开发,可运行于Java虚拟机(JVM)上。它被设计为在Java开发环境中的替代语言,具有现代化的特性和语法。Kotlin具有许多优点,包括更简洁的语法、空安全、函数式编程支持、扩展函数、类型推断和智能转换等。它还提供了一些有用的工具和库,帮助开发者提高生产力。Kotlin与Java可以无缝地互操作,因此可以与现有的Java代码库和框架集成。转载 2024-08-15 20:29:24 · 866 阅读 · 0 评论 -
Kotlin Flow应用举例,launchIn 和collect用法及区别
收到消息:初始消息 消息已存储到数据库:初始消息 收到消息:你好,世界!收到消息:这是一个新的消息 消息已存储到数据库:这是一个新的消息。launchIn 用于在协程作用域中启动一个新的协程来收集消息流。launchIn 可以用于启动多个协程来处理同一个消息流,而 collect 只能启动一个协程。collect 会在当前协程中收集消息流,而 launchIn 会在新的协程中收集消息流。如果需要在新的协程中收集消息流,可以使用 launchIn。新消息2:Message("这是一个新的消息")转载 2024-07-25 11:13:29 · 358 阅读 · 0 评论 -
优雅实现网络请求:协程+Flow+Retrofit+OkHttp
使用协程+Flow+Retrofit+OkHttp,我们可以优雅地实现网络请求。我们可以将网络请求抽象为一个数据流,并用一个简单的函数来描述网络请求的过程。这种方法使得代码更加简洁、易读,更易于理解和维护。优雅实现网络请求:协程+Flow+Retrofit+OkHttp。转载 2024-07-05 16:01:56 · 762 阅读 · 0 评论 -
从MVI架构中学习Kotlin Flow的几种特性与用法
之前的 MVI 架构一文中,有小伙伴会有疑问,为什么要用这个Flow,能不能平替其他的 Flow。其实在 MVI 的封装中,每一种 Flow 都用到了,特别适合对比学习各种 Flow 的各种特性。我们直接先上代码,然后再一一讲解区别。代码很清晰,注释很详细,接下来我们就看看他们的区别。转载 2024-06-07 11:04:15 · 462 阅读 · 0 评论 -
Kotlin Flow:为何它在 Android 应用中成为 LiveData 的强大对手?
在 Android 应用开发中,有效地管理 UI 相关数据对于提供出色用户体验至关重要。长期以来,LiveData 一直是这一任务的首选工具之一,但随着 Kotlin Flow 的崛起,开发者们开始重新评估选择。虽然 LiveData 仍然是一个强大而可靠的工具,但是在某些方面,Kotlin Flow 提供了更加灵活和功能强大的解决方案。转载 2024-04-11 09:47:49 · 138 阅读 · 0 评论 -
Room和Flow的最佳实践指南
Room是一个SQLite对象映射库,它提供了SQLite数据库的抽象层,使得在Android应用中轻松进行数据库操作。通过Room,开发者可以在编译时进行SQL查询的验证,并且能够轻松地将数据库表中的数据转换为Java或Kotlin对象。Flow是Kotlin协程提供的一种基于数据流的异步编程工具,它可以帮助我们处理异步操作、数据流转换和错误处理。在Android开发中,Flow库已经成为了处理异步任务和数据流的重要工具,可以提高代码的可读性和可维护性。转载 2024-03-27 17:27:26 · 649 阅读 · 0 评论 -
关于Flow的7个问题
通过对Flow的核心概念、错误处理机制、数据转换与合并、性能优化与背压处理等方面的深度剖析,相信读者能够更好地应对Android面试中关于Flow的高级疑难问题。大揭秘,Android Flow面试官最爱问的7个问题。转载 2024-01-12 13:37:27 · 151 阅读 · 0 评论 -
ViewModel中使用Flow.collect()导致的内存泄漏问题
Kotlin Flow很有用,特别是当它用于将数据从数据层传递到UI时。当正确使用时,复杂的屏幕可以很容易地在数据更改时进行更新,理解和维护起来也非常简单。但是,就像我们所喜爱的Kotlin中的任何东西一样,这种强大功能也伴随着一些不那么明显的风险。转载 2023-12-21 18:58:46 · 777 阅读 · 0 评论 -
SharedFlow vs StateFlow,一篇看懂选择和使用技巧
在Android应用开发中,数据流是一个至关重要的概念。而在Jetpack库中,SharedFlow和StateFlow是两个处理数据流的利器,它们基于协程,提供了一种响应式的编程方式转载 2023-12-19 19:15:34 · 438 阅读 · 0 评论 -
推荐在 MVVM 架构中使用 Kotlin Flow 流转换livedata
到这里关于 Kotlin Flow 在 MVVM 当中每层的实践就分析完了,如果使用过 RxJava 的小伙伴们应该会非常熟悉,对于没有使用过 RxJava 的小伙伴们,入门的门槛也是非常低的,强烈建议至少体验一次,体验过之后,我认为你会跟我一样爱上它的。Flow 是协程的扩展,如果要在 Room 和 Retrofit 中使用,Room 和 Retrofit 需要支持协程才可以,在。文章也有提到, 这里我们在深入分析一下,在 ViewModel 中接受 Flow 发送的数据有三种方法,根据实际情况去调用。转载 2023-11-22 16:22:30 · 463 阅读 · 0 评论 -
使用更为安全的方式收集 Android UI 数据流
在 Android 应用中,通常需要从 UI 层收集 Kotlin 数据流,以便在屏幕上显示数据更新。同时,您也会希望通过收集这些数据流,来避免产生不必要的操作和资源浪费 (包括 CPU 和内存),以及防止在 View 进入后台时泄露数据。本文将会带您学习如何使用 LifecycleOwner.addRepeatingJob、Lifecycle.repeatOnLifecycle 以及 Flow.flowWithLifecycle API 来避免资源的浪费;转载 2023-11-22 15:26:53 · 271 阅读 · 0 评论 -
Flow : callbackFlow使用心得,避免踩坑
直接创建出来的Flow并不是线程安全的且使用起来也不是很方便,所以使用官方提供的创建Flow的APIcallbackFlow来进行创建。其实就是一个确保肯定会执行的代码块,无论携程被取消或者flow被关闭,都会执行这个代码块,可以在这个代码块里面进行一些资源释放的操作等等,防止内存泄漏。直接抛异常了,下游一个值也没有接收到,这要是在主线程,岂不是程序就崩溃了嘛。这里记录一下callbackFlow使用的心得,踩过的坑就不希望大家在踩一遍了,另外整个架构搭建完成也会开源出来,感兴趣小伙伴的可以关注一波哈。转载 2023-11-22 14:50:45 · 977 阅读 · 0 评论 -
ViewModel+Flow的绝佳实例和封装
在最近的Android开发中,主流推送慢慢从Java→Kotlin,LifeData→Flow.那里面各有各的好处,也都是为了解决不同应用场景给出不同的方案。但是在使用官方推荐的ViewModel+Flow时,会有很多需要解决的细节,里面也会牵涉到比较多的知识点。所以这个文章就是将自己学习到的东西进行总结.此文章会涉及到的知识点会比较多包括:kotlin扩展函数kotlin高阶函数kotlin内联函数Flow的使用。转载 2023-11-21 19:50:06 · 481 阅读 · 0 评论 -
LiveData 迁移到 Kotlin Flow详解
从 ViewModel 公开数据,并从 view 中收集数据的最佳方式是:使用 WhileSubscribed 策略,公开一个带有超时的 StateFlow。[示例]使用 repeatOnLifecycle 收集。[示例]任何其他组合,都将使上游 flow 保持活跃状态,从而浪费资源:使用 WhileSubscribed 公开,并在 lifecycleScope.launch/launchWhenX 中收集使用 Lazily/Eagerly 公开,并使用repeatOnLifecycle 收集。转载 2023-11-21 19:10:42 · 557 阅读 · 0 评论 -
用 Kotlin Flow 在 Android 应用中高效处理并发、并行和异步任务
Kotlin Flow 是在 Android 应用中管理并发、并行和异步任务的多功能和强大工具。通过其简洁的语法和丰富的操作符,它简化了复杂场景的处理,成为开发人员优化应用程序性能和响应性的重要选择。无论您处理并发操作、并行处理、错误处理、背压还是资源管理,Kotlin Flow 都能满足您的需求。用 Kotlin Flow 在 Android 应用中高效处理并发、并行和异步任务。转载 2023-11-21 19:02:20 · 1443 阅读 · 0 评论 -
Flow 中的背压管理:预防下游消费者过载
当下游消费者无法跟上上游生产者发射数据的速率时,就会发生背压。这可能导致数据积压、内存问题和应用程序崩溃。Kotlin Flow 引入了背压来优雅地解决这个问题。转载 2023-11-20 18:58:03 · 532 阅读 · 0 评论 -
Flow深入浅出系列之在ViewModels中使用Kotlin Flows
查理·卓别林(Charlie Chaplin)背对他的妻子,标签为LiveData,看着一个标签为Flow的迷人女人Flow是比较新潮的类似于异步计算流的值流类,属于Kotlin的Coroutines库,于2019年推出。它的概念与RxJava Observables类似,但基于协程,并且具有更简单的API。首先,只有冷流可用:无状态的流,在每次观察者在协程范围内开始收集值时根据需要创建。每个观察者都有自己的值序列,它们不共享。转载 2023-10-19 10:23:45 · 372 阅读 · 0 评论 -
异步任务的串并行嵌套及截断
Kotlin 为中断流提供了一个更友好的扩展方法transformWhile(),套路依然是拦截转发,即新建下游流,它生产数据的方式是通过收集上游数据,并将数据转发到一个带有发射数据能力的 lambda 中,当前这个 lambda 有一个返回值,该值决定了是否要终止上游流数据的生产(即是否抛出异常)。并发组和串行组之间又是并发的关系,当并发组中所有请求返回时会截断串行组,即终止串行组中后续请求,然后选取所有返回价格中的最大值。这样就形成了嵌套流,从Flow到Flow。转载 2023-09-12 09:55:30 · 301 阅读 · 0 评论 -
apache ftpserver use
apache ftpserver 使用方法示例转载 2023-09-08 18:39:43 · 169 阅读 · 0 评论 -
SharedFlow与StateFlow:最佳实践和实际应用案例
深入探索Kotlin流的世界,并比较SharedFlow和StateFlow。下面是这两种流类型以及它们的用途的总览:SharedFlow和StateFlow都是Kotlin的kotlinx.coroutines库的一部分,专门设计用来处理异步数据流。它们都是建立在Flow的基础之上的,但用于不同的目的。转载 2023-08-31 09:45:32 · 1154 阅读 · 0 评论 -
一文读懂Kotlin的数据流 冷流 热流
Flow是Google官方提供的一套基于kotlin协程的响应式编程模型,它与RxJava的使用类似,但相比之下Flow使用起来更简单,另外Flow作用在协程内,可以与协程的生命周期绑定,当协程取消时,Flow也会被取消,避免了内存泄漏风险。协程是轻量级的线程,本质上协程、线程都是服务于并发场景下,其中协程是协作式任务,线程是抢占式任务。默认协程用来处理实时性不高的数据,请求到结果后整个协程就结束了。比如,有下面一个例子:对于实时性不高的场景,直接使用 Kotlin 的协程处理即可,比如。转载 2023-08-31 09:44:56 · 2146 阅读 · 0 评论 -
Kotlin中 Flow、SharedFlow与StateFlow区别 冷流 热流
了解过协程Flow的同学知道是典型的冷数据流,而SharedFlow与StateFlow则是热数据流。冷流:只有当订阅者发起订阅时,事件的发送者才会开始发送事件。热流:不管订阅者是否存在,只要发送了事件就会被消费,意思是不管接受方是否能够接收到,在这一点上有点像我们Android的LiveData。LiveData新的订阅者不会接收到之前发送的事件,只会收到之前发送的最后一条数据,这个特性和SharedFlow的参数replay设置为1相似。转载 2023-08-30 16:55:42 · 2857 阅读 · 0 评论 -
掌握Flow:Kotlin异步编程
随着软件开发的不断演进,越来越需要高效优雅的解决方案来处理异步操作。在Kotlin的中,Flow API是一种突出的解决方案。Flow为异步操作带来了新的范式,为开发者提供了一种简洁直观的方式来处理数据流。在本篇深度探讨中,将深入到Kotlin的Flow,揭示其概念,强调其好处,并通过实际例子展示其在现实中的应用。转载 2023-08-15 13:13:14 · 213 阅读 · 0 评论 -
流操作符combine()
combine()运算符等待所有流发出至少一个值,然后才开始组合它们。因此,只有当传递到combine()块的所有流都至少发出一个值时,才会发生combine()运算符的转换块的第一次调用。Kotlin流操作符combine()转载 2023-08-08 16:47:03 · 1235 阅读 · 0 评论
分享