Kotlin
文章平均质量分 95
Flutter相关知识
tmacfrank
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Kotlin 协程十一 —— 协作、互斥锁与共享变量
协程协作与同步机制 协程提供了多种协作与同步机制: 协程等待:通过Job.join()和Deferred.await()实现协程间的顺序执行 select选择器:监听多个异步事件,优先处理最先完成的操作 互斥同步:使用@Synchronized注解或synchronized代码块保证线程安全 相比线程,协程的协作API更简洁安全,结构化并发特性使其更适合复杂场景。互斥机制则延续了Java的线程同步方式,保证共享资源的安全访问。原创 2026-04-21 16:39:35 · 617 阅读 · 0 评论 -
Kotlin 协程官方文档知识汇总(一)
Kotlin 是一门仅在标准库中提供最基本底层 API 以便其他库能够利用协程的语言。与许多其他具有类似功能的语言不同,async与await在 Kotlin 中并不是关键字,甚至都不是标准库的一部分。此外,Kotlin 的挂起函数概念为异步操作提供了比 future 与 promise 更安全、更不易出错的抽象。kotlinx.coroutines 是由 JetBrains 开发的功能丰富的协程库。使用协程需要添加对 kotlinx-coroutines-core 模块的依赖,如。原创 2025-03-22 23:53:56 · 1674 阅读 · 0 评论 -
Kotlin 协程十 —— SharedFlow 与 StateFlow
SharedFlow 与 StateFlow 是 Kotlin Flow 的两个实用变种,扩展了数据流的功能。SharedFlow 通过共享上游数据流实现广播式分发,允许多个收集者复用同一生产流程,适用于事件订阅等场景。与普通 Flow 不同,SharedFlow 独立运行生产流程,可能漏掉早期数据。StateFlow 则是特殊的 SharedFlow,更适合状态管理。两者都支持热流特性,但需注意收集不会自动结束,需手动控制生命周期。原创 2025-01-12 23:49:17 · 1748 阅读 · 0 评论 -
Kotlin 协程九 —— Flow 操作符(二)
本文介绍了Kotlin Flow中剩余的中间操作符与末端操作符,重点讲解了过滤与限制操作符(filter、distinctUntilChanged、drop/take)以及组合操作符(zip、combine、merge)。过滤操作符通过谓词条件筛选元素,限制操作符用于截断流数据。组合操作符可将多个流按不同策略合并:zip按顺序配对组合,combine合并最新值,merge交织多个流数据。文章还展示了如何通过filterIsInstance进行类型过滤,以及使用distinctUntilChanged进行去重原创 2025-01-12 23:48:43 · 1931 阅读 · 0 评论 -
Kotlin 协程八 —— Flow 操作符(一)
本文介绍了 Kotlin Flow 中的操作符及其上下文处理机制。主要内容包括: Flow 操作符分为创建、中间和末端三类,用于转换和操作数据流。 流的上下文保存机制:默认情况下,流的发射和收集在同一协程上下文中执行。 flowOn 操作符的作用:仅改变上游的协程上下文,不影响下游,常用于切换线程调度器。 对比 flowOn 与 withContext:withContext 在流构建器中直接使用会破坏上下文保存机制,导致异常。 获取协程上下文的方法:通过 currentCoroutineContext()原创 2025-01-12 23:47:51 · 1068 阅读 · 0 评论 -
Kotlin 协程七 —— Flow
Flow是Kotlin协程中处理异步数据流的核心API,可分为三类:数据流(Flow)、事件流(SharedFlow)和状态流(StateFlow)。Flow类似于支持协程的Sequence,采用惰性生产方式,数据在collect时才动态生成。其核心原理是每次collect都会重新执行flow构建器内的代码,实现独立的数据流处理。相比Channel,Flow更适合作为上层功能工具,提供更完整的数据流处理能力。Flow支持各种操作符,能实现复杂的数据转换和处理逻辑,是Kotlin协程中处理异步数据流的推荐方案原创 2025-01-12 23:47:17 · 1658 阅读 · 0 评论 -
Kotlin 协程六 —— Channel
文章摘要: Kotlin协程中的Channel是实现Flow底层通信的关键技术,主要用于协程间数据传递。Channel通过生产者-消费者模式工作,支持多协程并发操作。相比一次性传输的async,Channel能持续发送数据流。StateFlow和SharedFlow基于Channel构建,分别用于状态订阅和事件订阅。开发者可通过produce函数创建生产者协程,配合ReceiveChannel实现跨协程数据流处理。理解Channel机制对掌握Flow及构建高效协程架构至关重要,特别是在需要实时数据更新或事件原创 2025-01-12 23:46:22 · 1572 阅读 · 0 评论 -
Kotlin 协程五 —— 结构化并发之异常管理
本文摘要: 结构化并发中的异常管理分为两种传播方式:自动传播(launch/actor)和用户暴露(async/produce)。根协程的构建器类型决定了异常处理方式,异常会沿协程树向上传播并触发取消机制。取消与异常共用处理逻辑,区别在于传播方向和触发方式。取消是单向的,仅影响自身及下层协程;异常是双向的,会取消整个协程树。源码层面,CancellationException会被特殊处理以避免传播。这种设计体现了协程任务间的逻辑包含关系,子协程取消意味着父协程任务不再需要继续执行。原创 2025-01-12 23:42:41 · 1415 阅读 · 0 评论 -
Kotlin 协程四 —— 结构化并发之结构化取消
结构化并发通过父子协程的层级关系管理并发任务的生命周期。父协程必须等待所有子协程完成才能结束,子协程的生命周期不能超过父协程。协程取消会级联传播,确保资源安全释放。Job 是最接近"协程本体"的概念,负责生命周期管理;CoroutineScope 提供协程运行环境。父子协程关系通过 launch 建立,父协程能获取子协程的 Job,子协程能获取父协程的 Job,形成树状结构。结构化并发实现了协程的自动化管理和资源安全。原创 2025-01-12 23:41:32 · 1603 阅读 · 0 评论 -
Kotlin 协程三 —— 协程的上下文与作用域
本文摘要: 文章深入解析了协程上下文(CoroutineContext)与作用域(CoroutineScope)的核心概念。协程上下文包含管理协程行为的四大元素:Job(生命周期控制)、CoroutineDispatcher(线程调度)、CoroutineName(调试标识)和CoroutineExceptionHandler(异常处理)。重点剖析了Job的线程安全操作和获取方式,以及CoroutineDispatcher的两种自定义线程池实现方式(newFixedThreadPoolContext/new原创 2025-01-12 23:39:54 · 1019 阅读 · 0 评论 -
Kotlin 协程二 —— 挂起函数
Kotlin协程通过挂起函数实现异步代码的线性结构,核心机制是挂起与恢复:挂起函数执行时协程暂停并保存状态,执行完毕后自动切回原线程(默认情况)。与传统回调方式相比,挂起函数消除了回调嵌套,简化了并发编程。挂起不会阻塞线程,线程可执行其他任务,而阻塞会独占线程资源。挂起函数必须在协程或另一个挂起函数中调用,真正的挂起点是可能暂停协程的位置(如withContext调用)。整个过程通过协程调度器管理线程切换,使异步逻辑更清晰高效。原创 2025-01-11 23:48:43 · 1856 阅读 · 5 评论 -
Kotlin 协程一 —— 协程的构建与生命周期
本文摘要:Kotlin协程是一种轻量级的并发管理工具,相比线程具有更低的内存开销和更简单的代码结构。文章介绍了协程的基本概念、优势以及与线程的对比,重点讲解了协程构建器launch的使用方法及其参数配置(上下文、启动模式等)。通过示例展示了如何启动协程并实现并发执行,同时解释了挂起函数和协程作用域等核心概念,为后续深入学习协程打下基础。原创 2025-01-11 23:24:54 · 1586 阅读 · 1 评论 -
Kotlin 协程基础知识总结七 —— Flow 与 Jetpack Paging3
Flow 与 Jetpack Paging3 Demo。原创 2024-12-31 23:07:43 · 1710 阅读 · 0 评论 -
Kotlin 协程基础知识总结六 —— 协程 Flow 的综合应用
(P92~P94)我们会将几个 Flow 的应用实例放在同一个 Demo 中,主页就是一个 Activity 里包含一个按钮,点击按钮跳转到对应的功能展示页面上。整体架构采用一个 Activity 多个 Fragment 的结构,结合 Jetpack 的 Navigation 和 Room 框架。配置上在 build.gradle 中导入依赖,开启 ViewBinding:接下来对 MainActivity 进行 ViewBinding 初始化:Activity 初始化完成,然后就应该创建主 Fragm原创 2024-12-30 23:54:18 · 1601 阅读 · 0 评论 -
Kotlin 协程基础知识总结五 —— 通道、多路复用、并发安全
这里有一个小技巧就是 async 正常应该是在协程环境中使用的,粗暴的方式是直接 GlobalScope.async,但是由于 GlobalScope 会造成内存泄漏,因此稍好一点的方式就是将两个函数从原本的挂起函数改造成 CoroutineScope 的扩展函数。实际上跟线程是一样的,共享变量 count 被多个线程操作,由于 count++ 不是原子操作,所以某个线程在取 count 的值时,可能不是 count 最新的值,而是自加前的老值,因此最终结果小于 1000。原创 2024-12-30 23:51:43 · 2879 阅读 · 0 评论 -
Kotlin 协程基础知识总结四 —— Flow
*如何理解流的上下文保存:**流的上下文保存指的是在 Kotlin 流(Flow)中,流的操作会继承之前操作中设置的上下文,这种行为被称为上下文保存。**流上下文与协程上下文是否相同:**在 Kotlin 中,流(Flow)的上下文通常是与协程的上下文相关联的,但它们并不完全相同。**流的上下文:**在 Kotlin 中,流(Flow)可以与协程的上下文(Coroutine Context)一起使用,以控制流的执行环境和调度方式。流的上下文用于控制流的执行环境,而协程的上下文用于控制整个协程的执行环境。原创 2024-12-28 15:21:00 · 1624 阅读 · 6 评论 -
Kotlin 协程基础知识总结三 —— 协程上下文与异常处理
Job:控制协程的生命周期CoroutineDispatcher:向合适的线程分发任务CoroutineName:协程名称,调试时很有用CoroutineExceptionHandler:处理未被捕获的异常。原创 2024-12-28 15:18:06 · 1647 阅读 · 0 评论 -
Kotlin 协程基础知识总结二 —— 启动与取消
最后一种方式是 yield,会出让线程的执行权,适用于 CPU 计算特别密集,可能会耗尽 CPU 资源的情况,此时出让调度器所在的线程(池)执行权,让所有线程(包括自己)重新竞争 CPU。需要说明的是,调用 cancel 后的 join 还是需要的,因为 runBlocking 中后续可能还会执行其他的代码,这里加一个 join 意思就是你等待我取消完成后再执行其他代码。但如果是一般的父协程,父协程本身的任务与其子协程的运行顺序是不确定的,父协程有可能先运行完而不等待子协程是否运行完。原创 2024-12-27 23:57:13 · 1371 阅读 · 0 评论 -
Kotlin 协程基础知识总结一 —— 挂起、调度器与结构化并发
(P2)协程难在哪?(P3)协程基于线程,它是轻量级的线程。GlobalScope 作为全局作用域可能会造成内存泄漏,官方不建议使用它。而是使用 MainScope、ViewModelScope 以及 LifecycleScope 等与 Lifecycle 绑定的作用域。原创 2024-12-27 23:53:42 · 1191 阅读 · 0 评论
分享