
Kotlin协程
文章平均质量分 89
koltin协程的使用与原理。
LeeDuo.
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Kotlin Coroutine‘s Secret
Kotlin协程:协程的基础与使用 Kotlin协程:协程上下文与上下文元素 Kotlin协程:续体、续体拦截器、调度器 Kotlin协程:创建、启动、挂起、恢复 Kotlin协程:生命周期原理 Kotlin协程:父子协程的绑定与传递 Kotlin协程:线程的桥接与切换 Kotlin协程:受限协程作用域与序列发生器 Kotlin协程:异步执行与同步获取 Kotlin协程:Dispatchers.IO线程池原理 Kotlin协程:异常处理机制原创 2022-10-07 18:27:55 · 1094 阅读 · 1 评论 -
Kotlin协程:MutableStateFlow的实现原理
在在MutableStateFlow方法中,根据参数value创建并返回一个类型为StateFlowImpl的对象,如果参数value为空,则传入对应的标识NULL。原创 2022-09-25 16:43:44 · 4556 阅读 · 0 评论 -
Kotlin协程:冷流转换热流的使用与原理
shareIn方法与stateIn方法的使用与实现的原理类似,下面以shareIn方法为例进行分析。原创 2022-10-02 18:46:56 · 2809 阅读 · 0 评论 -
Kotlin协程:StateFlow的设计与使用
StateFlow是一种单数据更新的热流,通过emit方法更新StateFlow的数据,通过value属性可以获取当前的数据。原创 2022-09-25 15:58:49 · 3123 阅读 · 0 评论 -
Kotlin协程:MutableSharedFlow的实现原理
/ 用于新订阅者申请使用当前AbstractSharedFlowSlot类型的对象 // 返回true代表申请成功,返回false代表申请失败 abstract fun allocateLocked(flow : F) : Boolean // 用于订阅者释放当前使用的AbstractSharedFlowSlot类型得到对象, // 并以数组的形式返回待恢复的续体 abstract fun freeLocked(flow : F) : Array < Continuation < Unit >?> }原创 2022-09-18 20:11:08 · 2397 阅读 · 0 评论 -
Koltin协程:异步热数据流的设计与使用
通过使用协程中提供的flow方法可以创建一个Flow对象。$it$it在上面的代码中,通过调用flow方法,构建了一个名为flow对象,并对flow对象异步执行了两次。每次都会打印出1、2、3、4,然后结束执行。无论谁在前谁在后,无论执行多少次,得到的结果都是相同的,这就是异步冷数据流的一个特点。原创 2022-09-18 17:13:18 · 657 阅读 · 0 评论 -
Kotlin协程:Flow的流式调用原理
Kotlin协程:Flow的流式调用原理在协程Flow中,除了flow方法外的其他方法,都是Flow接口的扩展方法,这些方法也被称作操作符。而flow方法用于创建一个类型为Flow的对象,一般用于创建整条链中的第一个Flow对象。除了collect方法外的其他方法,在被调用后都会返回一个Flow对象。这里的collect方法不是在Flow接口中定义的方法,而是Flow接口的扩展方法,一个操作符,一般用于在整条链创建完毕后,最为最后一个操作符调用,触发整条链的执行。原创 2022-09-13 10:47:07 · 1110 阅读 · 0 评论 -
Kotlin协程:Flow的异常处理
Flow异常处理catch方法 catch方法用于捕获上游流产生的异常,代码如下: catch方法是Flow接口的扩展方法,并返回一个Flow类型的对象。在catch方法中,调用flow方法创建了一个Flow对象。 catch方法核心是通过catchImpl方法实现异常的捕获,如果成功捕获到异常,则回调参数action处理。这里参数action是FlowCollector接口的扩展方法,因此可以继续调用emit方法,向下游发送值。 当下游调用collect方法时,会触发cat原创 2022-09-13 10:23:31 · 1530 阅读 · 0 评论 -
Koltin协程:Flow的触发与消费
在协程中,其实还提供了分离流的触发与消费的操作——onEach方法。通过使用onEach方法,可以将原本在collect方法中的消费过程的移动到onEach方法中。这样在构建好一个Flow对象后,不会立刻去执行onEach方法,只有当调用collect方法时,才会真正的去触发流的执行。这样就实现了流的触发与消费的分离。原创 2022-09-04 15:34:56 · 1035 阅读 · 0 评论 -
Kotlin协程:flowOn与线程切换
在flowOn方法中,首先会检查方法所在的协程是否执行结束。如果没有结束,则会执行判断语句,这里flowOn方法传入的上下文不是空上下文,且通过flow方法构建出的Flow对象也不是FusibleFlow类型的对象,因此这里会走到else分支,将上游flow方法创建的Flow对象和上下文包装成ChannelFlowOperatorImpl类型的对象。原创 2022-09-03 20:43:14 · 2014 阅读 · 0 评论 -
Kotlin协程:Flow的融合、Channel容量、溢出策略
当需要进行协程间的通信时,可以调用Channel方法,创建一个Channel接口指向的对象,通过调用该对象的send方法和receive方法实现消息的发送与接收。协程对Channel接口的实现,本质上与阻塞队列类似,这里不再赘述。......原创 2022-08-31 09:46:44 · 1063 阅读 · 0 评论 -
Kotlin协程:Flow基础原理
AbstractFlow类是一个抽象类,实现了Flow接口和CancellableFlow接口。// 核心方法 @InternalCoroutinesApi public final override suspend fun collect(collector : FlowCollector < T >) {原创 2022-08-30 20:32:07 · 1274 阅读 · 0 评论 -
Kotlin协程:异常处理机制
Koltin协程:异常处理机制 当一个协程执行过程中遇到未捕获的异常时,首先会尝试将异常传递给自己的父协程,最终传递给最顶级的父协程。如果父协程不处理(父协程为SupervisorJob或为async启动的协程),则由自身上下文中的异常处理器处理,如果自身上下文没有异常处理器,则会同时交给JVM全局的异常处理器和当前线程的uncaughtExceptionHandler处理。对于通过launch方法启动的协程,在执行过程中遇到未捕获异常时会直接抛出。原创 2022-08-24 09:51:50 · 1152 阅读 · 0 评论 -
Kotlin协程:Dispatchers.IO线程池原理
Kotlin协程:Dispatchers.IO线程池原理分析 CoroutineScheduler类是核心的线程池,用于任务的执行。LimitingDispatcher类对CoroutineScheduler类进行代理,是CoroutineScheduler类尾调机制的使用者,对任务进行初步排队。原创 2022-08-23 21:09:37 · 3522 阅读 · 0 评论 -
Kotlin协程:异步执行与同步获取
在协程中,可以通过async方法开启一个协程,执行任务。但与launch方法不同的是,async方法会返回一个Deferred接口指向的对象,通过调用找个对象的await方法,可以获取任务的执行结果,如果这时任务没有结束,await方法还会同步挂起等待任务执行完毕返回结果再继续执行。async方法启动协程的逻辑与launch方法是相同的,launch方法在中分析过。...原创 2022-08-14 16:47:31 · 4823 阅读 · 0 评论 -
Kotlin协程:受限协程作用域与序列发生器
当使用序列发生器进行迭代时,首先会调用hasNext方法,hasNext方法会通过保存的续体,恢复序列发生器所在的协程继续执行,获取下一次待发射的数据。如果获取了到数据,则会返回true,这样之后通过next方法就可以获取到对应的数据。当序列发生器所在的协程在执行中遇到yield方法时,会发生挂起,同时将下一次待发射的数据保存起来。如果遇到的是yieldAll方法,则保存的是迭代器,下一次发射数据时会从迭代器中获取。...原创 2022-08-13 19:40:42 · 668 阅读 · 0 评论 -
Kotlin协程:线程的桥接与切换
Kotlin协程:作用域协程、线程的桥接与切换原创 2022-08-13 18:15:01 · 1332 阅读 · 0 评论 -
Kotlin协程:父子协程的绑定与传递
之前在这里与之前在中分析的协程生命周期方法类似,也是将父子协程封装成ChildHandleNode对象,之后进行类型转换。最终通过invokeOnCompletion方法获取ChildHandle对象。这里的逻辑可以理解成子协程监听父协程完成。......原创 2022-08-08 14:29:19 · 950 阅读 · 0 评论 -
Kotlin协程:生命周期原理
start方法用于启动协程,对于已经启动的协程,再次调用它的start方法是没有意义的。默认情况下,协程在创建后会自动启动。而根据上一篇的分析,如果协程按照LAZY模式启动,则需要手动去调用它的start方法。接下来以launch方法为例,分析LAZY启动模式下协程的启动。LazyStandaloneCoroutine类内部只对协程进行了创建,但并没有启动,只有当手动去调用start方法后才会启动。......原创 2022-08-07 18:56:07 · 1240 阅读 · 0 评论 -
Kotlin协程:创建、启动、挂起、恢复
Kotlin协程:创建、启动、挂起、恢复原创 2022-07-31 20:44:24 · 2082 阅读 · 0 评论 -
Kotlin协程:续体、续体拦截器、调度器
为什么协程需要EventLoop呢?协程的本质是续体传递,而续体传递的本质是回调,假设在Dispatchers.Unconfined调度下,要连续执行多个suspend方法,就会有多个续体传递,假设suspend方法达到一定数量后,就会造成StackOverflow,进而引起崩溃。同样的,我们知道调用runBlocking会阻塞当前线程,而runBlocking阻塞的原理就是执行“死循环”,因此需要在循环中做任务的分发,去执行内部协程在Dispatchers.Unconfined调度器下加入的任务。...原创 2022-07-31 12:29:36 · 753 阅读 · 0 评论 -
Kotlin协程:协程上下文与上下文元素
协程上下文的原理与继承关系,上下文元素的组合原理。原创 2022-07-30 21:30:46 · 912 阅读 · 0 评论 -
Kotlin协程:协程的基础与使用
协程是Coroutine的中文简称,co表示协同、协作,routine表示程序。协程可以理解为多个互相协作的程序。协程是轻量级的线程,它的轻量体现在启动和切换,协程的启动不需要申请额外的堆栈空间;协程的切换发生在用户态,而非内核态,避免了复杂的系统调用。...原创 2022-07-24 19:39:47 · 16231 阅读 · 5 评论