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