
kotlin
文章平均质量分 64
dxyadc
这个作者很懒,什么都没留下…
展开
-
协程源码解析准备之CoroutineContext简析
协程里面CoroutineContext是个很重要的概念,从描述看,类似一个集合,把关键元素都放入里面,根据key可以拿到不同类型的对象。和map的区别在于,map的value是相通类型,需要强制类型转换,而context根据key的类型返回不同类型的对象,不用强制类型转换。可以看到,这里有个特殊的存在,即ContinuationInterceptor 协程拦截器元素,始终放在CombinedContext的首位,结合CombinedContext的代码。既然是类似集合,需要提供访问、添加和删除的接口。原创 2024-02-17 15:29:18 · 201 阅读 · 0 评论 -
android kotlin 协程源码分析withContext挂载和恢复
我们根据业务代码,子协程切换到io线程后,执行AnonymousClass1的resumeWith方法,根据代码片段3的内容,invokeSuspend子协程业务执行完毕后,会进行if判断,completion的类型,AnonymousClass1的成员completion为DispatchedCoroutine,所以直接执行completion.resumeWith。这边连接我们知道,我们的业务代码会生成一个匿名内部类,其父类继承SuspendLambda,反编译代码如下()原创 2024-02-19 15:00:11 · 1518 阅读 · 0 评论